14.7 Rmd ソースの生成に knitr::knit_expand() を使う

knitr::knit_expand() 関数は, デフォルトで {{ }} 内の表現を値に展開 (expand) します. これが例です.

knitr::knit_expand(text = "`pi` の値は {{pi}} である.")
## [1] "`pi` の値は 3.14159265358979 である."
knitr::knit_expand(
  text = "`a` の値は {{a}} なので, `a + 1` は {{a+1}} である.",
  a = round(rnorm(1), 4)
)
## [1] "`a` の値は -1.1142 なので, `a + 1` は -0.1142 である."

{{ }} 内に動的なものが含まれている Rmd 文書であれば, knit_expand() を適用して knit() を呼び出してコンパイルすることができるということを, この例は意味しています. 例えばここに template.Rmd という文書があったとします.

# {{i}} に対する回帰

```{r lm-{{i}}}
lm(mpg ~ {{i}}, data = mtcars)
```

mtcars データセット内の mpg に対する他の変数全てを一つ一つ使った線型回帰モデルを構築できます.

```{r, echo=FALSE, results='asis'}
src = lapply(setdiff(names(mtcars), 'mpg'), function(i) {
  knitr::knit_expand('template.Rmd')
})
res = knitr::knit_child(text = unlist(src), quiet = TRUE)
cat(res, sep = '\n')
```

この例が難しくて理解できないと感じたら, チャンクオプション results = 'asis' の意味を知るのに11.11節を, knitr::knit_child() の使用法を知るのに16.4節を見てください.