この記事の目的
私が大好きなRMarkdownについて、Tipsを集中的に連載しようという思いつきの企画です。あと自分の中で進めている別企画のメモという位置づけでもあります。なので大した中身はありません。
R Markdownとは
Markdown記法をベースに、チャンクという形でRのコードを記述して評価・出力することができるものです。RStudioのクイックリファレンスでは以下のように説明してあります:
R Markdown is an easy-to-write plain text format for creating dynamic documents and reports.
R Markdown、長くなるとやっぱりしんどい
どのようなドキュメントでも、ある程度分量が多くなってしまうとすごく長くなってしまい、修正や確認が大変です。通常ならある程度ファイルを小分けにして合成するという手段を検討したくなるところですね。
Rチャンクのchild
オプション
R MarkdownのRチャンクにはchild
オプションがあります。これを利用すると他のRmdファイルを自動的に読み込んでくれます。この機能に関する簡単な説明は、「第3回 レポつく自由自在~R Markdown基礎文法最速マスター:R Markdownで楽々レポートづくり|gihyo.jp … 技術評論社」をご覧ください。
まず、読み込ませたいファイル(ここではchild.Rmdとします)を作成します(コードチャンク前の\は無視してください)。
## ほげほげちゃいるど
\```{r child-01}
knitr::kable(iris(head))
\```
これを、親にあたるRmdファイル(okan.Rmd)で読み込みます。以下のようにRチャンクを作成します(コードチャンク前の\はないものと思って下さい)。
(省略)
# 子Rmdの読み込み
\```{r child="child.Rmd"}
\```
(省略)
これでchild
オプションを設定した箇所に、child.Rmd
の内容が読み込まれて組み込まれます。これで簡単に小分けできますね。
注意点
ちょっと試していて気になった点をメモします。
親Rmdがchildを呼び出すために作るRチャンクの中身について
上の例で、呼び出す時に内容はナシにしています。なお中身を書いているとエラーが出て「child
オプション使うときは中身を空にしなさい。無視するよ」と怒られます。空っぽにしときましょう。
Rチャンクのチャンクラベルについて
これは注意が必要で、明示的にチャンクラベルを指定するときは、両方通じてちゃんと識別されるように別名にするようにしてください。
Rmdではチャンクラベルとして名前をつけることができます。ただこれがドキュメント内で被ってしまうと問題が発生します1。実行してなぜかうまくいかない場合は、これを疑ってみるといいかも知れません。
※ 2015/12/24追記
このチャンクラベルの被り問題について、「knitr1.1.0以降ではこれを回避するオプションが実装されている」とのコメントをいただきました。@uri さんありがとうございます。
knit()
される前に以下のオプションを読み込んでおくと、回避するようになります:
options(knitr.duplicate.label = 'allow')
これを効率よく当てておくためには、.Rprofileに記述するのが楽ですので、よくやってしまう場合にはご検討ください。
子Rmdの内容について
RmdファイルはRStudioで生成すると色々なものが初めから書き込まれています。たとえば冒頭のyaml部分などです。これらについては、あってもなくても問題ないです。子Rmdでyamlでテーマとか記述していても、親Rmdのyamlが反映されます。要するにbody要素しか持ってこない、というわけです。
この辺りはどうやっていくかは個人の編集スタイルによるところが大きいので、色々試してみて自分なりに使いやすい方法を探してみてはいかがでしょうか。
Enjoy!
-
もし被っていたらエラーがでてレンダリングされずドキュメントが生成されません。私はよくやってしまいます。 ↩