Help us understand the problem. What is going on with this article?

R Markdown内で他のRmdファイルを読み込む

More than 3 years have passed since last update.

この記事の目的

私が大好きな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とします)を作成します(コードチャンク前の\は無視してください)。

child.Rmd
## ほげほげちゃいるど
\```{r child-01}
knitr::kable(iris(head))
\```

これを、親にあたるRmdファイル(okan.Rmd)で読み込みます。以下のようにRチャンクを作成します(コードチャンク前の\はないものと思って下さい)。

okan.Rmd
(省略)

# 子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!


  1. もし被っていたらエラーがでてレンダリングされずドキュメントが生成されません。私はよくやってしまいます。 

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away