R Markdownファイルにチャンクそのものを表示する
R Markdownで教材を作っていると、コードチャンクの中身はもちろんですが、「チャンクはこうやって書きます」という、チャンク全体を出力したいことがあります。前の記事でも、fig.cap
オプションの説明をするためにそのようにしています。
これについては、昨年大学の教材を作っていた時に、どうしたものかと悩んで調べたところ、Show an R markdown chunk in the final output - Stack OverflowというQAがありました。あまり詳しい動作は理解できていませんが、verbatim=TRUE
というオプションを定義して、TRUE
の場合は、 ```{r ...}
という部分を文字列として出力し、最後に ```
も出力するようです。
blogdownでも、setup
チャンクに以下のように書いておけば利用できます。
```{r setup, include=FALSE}
# print R Markdown chunk
# https://stackoverflow.com/q/19908158
hook_source_def = knit_hooks$get('source')
knit_hooks$set(source = function(x, options){
if (!is.null(options$verbatim) && options$verbatim){
opts = gsub(",\\s*verbatim\\s*=\\s*TRUE\\s*", "", options$params.src)
opts = gsub("\\s*eval\\s*=\\s*TRUE\\s*", "eval=FALSE", opts)
bef = sprintf('\n\n ```{r %s}\n', opts, "\n")
stringr::str_c(bef, paste(knitr:::indent_block(x, " "), collapse = '\n'), "\n ```\n")
} else {
hook_source_def(x, options)
}
})
```
このままだと、Pythonチャンクであっても ```{r ...}
と出力されたり、完ぺきではありませんが、「こんな感じでできそう」という意味では充分に参考になりました。