2

教育目的でpurl、ファイルのチャンク.Rnwを個別のファイルに分割したいと思います。この回答は、その方法を説明しています:

Knitr を使用して .Rmd ファイル内の各チャンクを複数の .R ファイルにプルする方法

しかし、メソッドはチャンクオプションを保持しません。私が持っているチャンクはプロットを生成するので、オプションfig.widthfig.heightオプションを保持することが重要です。理想的には、次のようなチャンクが必要です。

<<plot, fig.width = 3, fig.height = 5, outwidth = '.75\\textwidth'>>=
plot (1,1)
@

plot.R次のような名前のファイルになります。

#+ fig.width = 3, fig.height = 5
plot (1,1)

つまり、チャンク オプションfig.widthfig.heightを で認識される形式に変換しspin()purl()無関係なチャンク オプションを削除するか、またはspin()などの Word に問題を作成しますout.width。すべては、ユーザー フレンドリーなコード ファイルを作成するという精神にあります。

4

1 に答える 1

1

あなたが参照している回答は の結果からヘッダー行をコピーしないためpurl、チャンク名以外のすべてが失われます。ヘッダーに貼り付けるように適応させることはできますが、出力を解析する関数を作成することは実際には難しくありません。とにかく、またはドキュメントpurlを解析しようとするよりもはるかに簡単で、どのように行うかを正確に分類するよりも簡単です。RmdRnwknitr

purl_chunks <- function(input_file){
  purled <- knitr::purl(input_file)    # purl original file; save name to variable
  lines <- readLines(purled)    # read purled file into a character vector of lines
  starts <- grep('^## ----.*-+', lines)    # use grep to find header row indices
  stops <- c(starts[-1] - 1L, length(lines))   # end row indices
  # extract chunk names from headers
  names <- sub('^## ----([^-]([^,=]*[^,=-])*)[,-][^=].*', '\\1', lines[starts])
  names <- ifelse(names == lines[starts], '', paste0('_', names)) # clean if no chunk name
  # make nice file names with chunk number and name (if exists)
  file_names <- paste0('chunk_', seq_along(starts), names, '.R')
  for(chunk in seq_along(starts)){    # loop over header rows
    # save the lines in the chunk to a file
    writeLines(lines[starts[chunk]:stops[chunk]], con = file_names[chunk])
  }
  unlink(purled)    # delete purled file of entire document
}

いくつかのメモ:

  • 正規表現は私が投げたものに対して機能しますが、まだ誤りがあるかもしれません。テスト済み:
    • チャンク名なし
    • 名前はありませんが、チャンク設定
    • ハイフン付きの名前
    • 一字名
    • 後(コンマ/中括弧の前)を含む、スペースを含む名前
  • とファイルはどちらも同じで、どちらでも機能します.Rnw.Rmdpurl
  • のパラメータにはデフォルト設定 ( 1L) が使用されます。チャンク ヘッダーがないため、とにかくここでは無意味ですが、(テキスト チャンクがコメントとして含まれる) 処理が愚かになります。ただし、次のコードチャンクを含むテキストチャンクが必要な場合は、そのように再構築できます。purldocumentation0L2Lroxygen
  • の出力ヘッダー行は、purl上記の例とまったく同じではありませんが (ハイフンで始まり、## ----ハイフンで埋められています)、spin正しく表示されます。結果はチャンク オプションに従います。
于 2016-03-08T09:42:38.050 に答える