11.17 チャンク内のオブジェクト表示をカスタマイズする (*)
デフォルトではコードチャンク内のオブジェクトは knitr::knit_print()
関数を通して表示され, これは概ね base R の print()
と同じです. knit_print()
関数は S3 ジェネリック関数であり, 自分で S3 メソッドを登録して機能を拡張できることを意味します. 以下は knitr::kable()
でデータフレームを表として自動表示する方法の例です.
---
title: データフレームの表示にカスタム `knit_print` メソッドを使う
---
`knit_print` メソッドを定義して登録します.
初めに
```{r}
knit_print.data.frame = function(x, ...) {
res = paste(c("", "", knitr::kable(x)), collapse = "\n")
knitr::asis_output(res)
}
registerS3method(
"knit_print", "data.frame", knit_print.data.frame,
envir = asNamespace("knitr")
)
```
`knitr::kable()` を明示的に呼ぶ必要がないことに注意してください.
これでデータフレームに対するカスタム表示メソッドをテストできます. もはや
```{r}
head(iris)
```
```{r}
head(mtcars)
```
knit_print()
関数の詳細は knitr パッケージのビネットから学ぶことができます.
printr パッケージ (Xie 2021e) はいくつかの R オブジェクトを可能な範囲で自動的に表として表示する S3 メソッドをいくつか提供します. コードチャンクで library(printr)
を実行するだけで十分で, 全てのメソッドが自動的に登録されます.
このテクニックがとても上級者向けだと感じたなら, html_document
や pdf_document
のような R Markdown の出力フォーマットに df_print
オプションを与えてください. これでデータフレームの表示に関する挙動をカスタマイズできます. 例えばデータフレームを knitr::kable()
で表示したいなら, このようにオプションを設定することもできます.
---
output:
html_document:
df_print: kable
---
出力フォーマット (?rmarkdown::html_document
など)が df_print
をサポートするかどうか, そこで使用可能な値が何であるかの判断は, 出力フォーマット関数のヘルプページを見てください.
実際には, render
チャンクオプションで knit_print()
関数を完全に置き換えることができます. このオプションはオブジェクトを表示する任意の関数を取ることができます. 例えば pander パッケージ を使ってオブジェクトを表示したいなら, チャンクオプション render
に pander::pander()
を設定するとよいでしょう.
```{r, render=pander::pander}
iris
```
render
オプションによって, あなたは R オブジェクトの表示方法に対する完全なる自由を手に入れるでしょう.