knitrを使用して、データセットの異なるサブセットに対して同じ分析セットを実行するレポートを生成しようとしています。プロジェクトには2つのRmdファイルが含まれています。最初のファイルはワークスペースとドキュメントを設定するマスタードキュメントであり、2番目のファイルには分析を実行して関連する図を生成するチャンクのみが含まれています。
私がやりたいのは、マスターファイルを編成することです。マスターファイルは、データサブセットごとに2番目のファイルを呼び出し、結果を1つのドキュメントに含めます。以下は簡単な例です。
マスタードキュメント:
# My report
```{r}
library(iterators)
data(mtcars)
```
```{r create-iterator}
cyl.i <- iter(unique(mtcars$cyl))
```
## Generate report for each level of cylinder variable
```{r cyl4-report, child='analysis-template.Rmd'}
```
```{r cyl6-report, child='analysis-template.Rmd'}
```
```{r cyl8-report, child='analysis-template.Rmd'}
```
analysis-template.Rmd:
```{r, results='asis'}
cur.cyl <- nextElem(cyl.i)
cat("###", cur.cyl)
```
```{r mpg-histogram}
hist(mtcars$mpg[mtcars$cyl == cur.cyl], main = paste(cur.cyl, "cylinders"))
```
```{r weight-histogam}
hist(mtcars$wt[mtcars$cyl == cur.cyl], main = paste(cur.cyl, "cylinders"))
```
問題は、knitrが一意でないチャンクラベルを許可しないためanalysis-template.Rmd
、2回目に呼び出されたときに編み物が失敗することです。一意のラベルが自動的に生成されるため、チャンクに名前を付けないでおくと、この問題を回避できます。ただし、これは理想的ではありません。チャンクラベルを使用して、エクスポートされたプロットの有益なファイル名を作成したいからです。
考えられる解決策は、現在のシリンダーをチャンクラベルに追加する単純な関数を使用することです。
```r{paste('cur-label', cyl, sep = "-")}
```
しかし、knitrがチャンクラベルの位置で式を評価するようには見えません。
また、現在のチャンクのラベルを変更するカスタムチャンクフックを使用してみました。
knit_hooks$set(cyl.suffix = function(before, options, envir) {
if (before) options$label <- "new-label"
})
しかし、チャンクラベルを変更しても、生成されたプロットのファイル名には影響しなかったため、knitrが新しいラベルを利用しているとは思いませんでした。
同じ子ドキュメントを複数回呼び出すことができるようにチャンクラベルを変更する方法についてのアイデアはありますか?それとも、これを達成するための代替戦略ですか?