17.4 パラメータ化されたレポート
17.3節では for
ループ内で一連のレポートをレンダリングする方法を1つ紹介しました. 実際には rmarkdown::render()
はこのタスクのために設計された params
という名前の引数を持っています. この引数を通じてレポートをパラメータ化することができます. レポート用のパラメータを指定した時は, レポート内でparams
変数が使えます. 例えば, 以下を呼び出したとします.
それから input.Rmd
内部では, オブジェクト params
が state
変数を持つリストになります.
---
title: "`r params$state` に関するレポート"
output: html_document
---
`r params$state` の面積は
`r state.area[state.name == params$state]`
平方マイルである.
レポートに対してパラメータを指定する別の方法として, YAML フィールドで params
を使うという手もあります. 例えばこのように.
---
title: パラメータ化されたレポート
output: html_document
params:
state: ネブラスカ州
year: 2019
midwest: true
---
YAML の params
フィールドまたは rmarkdown::render()
の params
引数には, いくつでもパラメータを含められることに注目してください. YAML のフィールドと rmarkdown::render()
の引数とが両方あるときには, render()
の引数の値が対応する YAML フィールドの値を上書きしてしまいます. 例えば先ほどの params
フィールドを使った例で rmarkdown::render(..., params = list(state = 'アイオワ州', year = 2018)
を呼び出した場合は, R Markdown 文書上の params$state
は ネブラスカ州
の代わりに アイオワ州
に, params$year
は 2019
の代わりに 2018
になります.
同じ R Markdown 文書を一連のレポート群へとレンダリングする時は, 各レポートのファイル名が一意になるように rmarkdown::render()
の output_file
引数を調整する必要があります. そうでないと, うっかりレポートファイルを上書きしてしまいます. 例えば, 各州の各年ごとにレポートを生成できる関数を書きます.
render_one <- function(state, year) {
# input.Rmd の出力フォーマットが PDF と仮定
rmarkdown::render(
'input.Rmd',
output_file = paste0(state, '-', year, '.pdf'),
params = list(state = state, year = year),
envir = parent.frame()
)
}
そして for
ループをネストして全てのレポートを生成します.
最終的に, アラバマ州-2000.pdf
, アラバマ州-2001.pdf
, …, ワイオミング州-2019.pdf
, and ワイオミング州-2020.pdf
のように一連のレポートを得られます.
パラメータ化されたレポートであれば, Shiny で作成されたグラフィカルユーザーインターフェイス (GUI) を通して対話的にパラメータを入力することも可能です. これは YAML に params
フィールドを与えることが必要ですが, 各パラメータに対応する適切な入力ウィジェットを用いた GUI を rmarkdown が自動的に作成してくれます. 例えばチェックボックスはブーリアン型のパラメータに対して用意されます.
RStudio を使用していないなら, rmarkdown::render()
呼び出して params = 'ask'
を渡せば GUI を開始できます.
RStudio を使用しているなら, メニューの Knit
ボタンの中にある Knit with Parameters
をクリックすることが可能です. 図17.1はパラメータに対する GUI の例を示しています.
パラメータ化されたレポートの詳細については, R Markdown Definitive Guide (Xie, Allaire, and Grolemund 2018) の Chapter 15 を読むとよいでしょう.