あなたが参照している回答は の結果からヘッダー行をコピーしないためpurl
、チャンク名以外のすべてが失われます。ヘッダーに貼り付けるように適応させることはできますが、出力を解析する関数を作成することは実際には難しくありません。とにかく、またはドキュメントpurl
を解析しようとするよりもはるかに簡単で、どのように行うかを正確に分類するよりも簡単です。Rmd
Rnw
knitr
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
。.Rmd
purl
- のパラメータにはデフォルト設定 (
1L
) が使用されます。チャンク ヘッダーがないため、とにかくここでは無意味ですが、(テキスト チャンクがコメントとして含まれる) 処理が愚かになります。ただし、次のコードチャンクを含むテキストチャンクが必要な場合は、そのように再構築できます。purl
documentation
0L
2L
roxygen
- の出力ヘッダー行は、
purl
上記の例とまったく同じではありませんが (ハイフンで始まり、## ----
ハイフンで埋められています)、spin
正しく表示されます。結果はチャンク オプションに従います。