子ドキュメントを親ドキュメントに呼び出すことが可能であることはわかっています。しかし、私はそれが完全な文書ではなく、子供の特定の塊を呼び出すことが可能かどうか疑問に思っていました。knitrを使って特定のチャンクを子ドキュメントから親ドキュメントに呼び出す方法は?
これは可能ですか?
子ドキュメントを親ドキュメントに呼び出すことが可能であることはわかっています。しかし、私はそれが完全な文書ではなく、子供の特定の塊を呼び出すことが可能かどうか疑問に思っていました。knitrを使って特定のチャンクを子ドキュメントから親ドキュメントに呼び出す方法は?
これは可能ですか?
はい、可能です。
それを正確に実装する方法は、1)子ドキュメントが実際に親ドキュメントに含まれ、そのチャンクの一部が親で再利用されるか、2)1つの「子」ドキュメントからチャンクを選択的に使用するか、別の "親"文書の文書。 (この場合、実際の親子関係はないことを強調するために引用符を使用しています)。
ケース1は自明です。親ドキュメントのすべてのチャンクは、子ドキュメントで「既知」であり、その逆もあります。したがって、親文書内の子文書からのチャンクの再利用は、簡単なchunk reuseになります。つまり、あるラベルを持つ空のチャンクは、同じラベルの前のチャンクのコードを継承します。
ケース2では、子ドキュメントを実際には含まずに子ドキュメントからチャンクを読み取る必要があります。メイン文書の次のチャンクは、このトリックを行います。
<<hiddenChild, echo = FALSE>>=
invisible(knitr::knit_child("mychild.Rnw", quiet = TRUE))
@
これは、子ドキュメントを評価しますが、すべての出力を無視します。その後、ケース1に戻り、子供のチャンクを再利用することができます。
しかし、私の意見ではケース2が不満です。子ドキュメント全体が評価されますが、これには時間がかかり、望ましくない副作用があります。したがって私はcode externalizationの上に別のワークフローを提案しています。そのRファイルを読み取るために初期チャンクにknitr::read_chunk
を使用し、メイン文書で
# ---- test-a ----
1 + 1
x = rnorm(10)
# ---- test-b ----
mean(x)
sd(x)
:すべてのチャンク(または両方のドキュメントで使用されている少なくともチャンク)がknitr-example 113ように構成されているRファイルに配置されています。これは、Rファイルを2つの(まだ評価されていない)チャンクtest-a
とtest-b
に解析します。これらは、との両方のドキュメントで再利用できます。 (子ドキュメントがコンパイル可能なスタンドアロンでなければならない場合は、read_chunk
も子に追加します。メインドキュメントの編成時に同じチャンクを2度読み込んでも問題ありません)