毎度忘れるのでメモ。
サンプルファイルの準備
以下のファイルがあるとします:
---
title: "Untitled"
output: html_document
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```
## hogehoge
hogehoge.
```{r cars}
# hogehoge
summary(cars)
```
## fugafuga
Why are you using SJIS?
```{r pressure, echo=FALSE}
#' fugafuga
#' hogfuga
plot(pressure)
```
end.
このファイルをpurl_test.Rmd
とします。
knitr::purl()
で抜き出し
チャンク内のコード部分を抜き出して別のRスクリプトファイルに吐き出させるにはknitr::purl()
関数を使います:
> knitr::purl("purl_test.Rmd")
processing file: purl_test.Rmd
|.................................................................| 100%
output file: purl_test.R
[1] "purl_test.R"
これでpurl_test.R
というファイルが生成されます。内容はこんな感じ:
purl_test.R
## ----setup, include=FALSE------------------------------------------------
knitr::opts_chunk$set(echo = TRUE)
## ----cars----------------------------------------------------------------
# hogehoge
summary(cars)
## ----pressure, echo=FALSE------------------------------------------------
#' fugafuga
#' hogfuga
plot(pressure)
シンプルな仕上がりです。
引数による出力パターンの指定
先の例だと,各チャンクのヘッダー部分も持ってきてくれています。このknitr::purl()
はdocumentation=
という引数があり,出力のパターンを指定することができます:
-
documentation = 0
: チャンク内のコードのみのピュアなRスクリプトを出力 -
documentation = 1
: 各チャンクのヘッダー部分も合わせて持ってくる**(デフォルト)** -
documentation = 2
: チャンク部分以外のテキスト(冒頭yaml部分も含む)を,roxygenスタイルのコメント(#'
)で全て持ってくる
ということで引数を与えてみて試してみます。なおすでに生成予定のファイル名と同一のものが存在している場合,上書きされず何もされないみたいです。
knitr::purl("purl_test.Rmd", documentation = 0)
の実行結果は以下の通り:
purl_test.R
knitr::opts_chunk$set(echo = TRUE)
# hogehoge
summary(cars)
#' fugafuga
#' hogfuga
plot(pressure)
そして,knitr::purl("purl_test.Rmd", documentation = 2)
の実行結果は以下の通り:
purl_test.R
#' ---
#' title: "Untitled"
#' output: html_document
#' ---
#'
## ----setup, include=FALSE------------------------------------------------
knitr::opts_chunk$set(echo = TRUE)
#'
#' ## hogehoge
#'
#' hogehoge.
#'
## ----cars----------------------------------------------------------------
# hogehoge
summary(cars)
#'
#' ## fugafuga
#'
#' Why are you using SJIS?
#'
## ----pressure, echo=FALSE------------------------------------------------
#' fugafuga
#' hogfuga
plot(pressure)
#'
#' end.
最後の2
はパッケージ開発とかで使えそうですし,0
や1
も状況によって使えそうですね。
Enjoy!