鶴見教育工学研究所

R Markdownファイルにチャンクそのものを表示する

Tags:

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 ...} と出力されたり、完ぺきではありませんが、「こんな感じでできそう」という意味では充分に参考になりました。