相关疑难解决方法(0)

R knitr:可以以编程方式修改块标签吗?

我正在尝试使用knitr生成一个报告,该报告对数据集的不同子集执行相同的分析.项目包含两个RMD文件:所述第一文件是设置了工作区和该文档的主文档,所述第二文件只包含执行分析的块,并产生相关的数字.

我想要做的是编织主文件,然后为每个数据子集调用第二个文件并将结果包含在单个文档中.下面是一个简单的例子.

主文件:

# 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'}
```
Run Code Online (Sandbox Code Playgroud)

分析-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"))
```
Run Code Online (Sandbox Code Playgroud)

问题是knitr不允许使用非唯一的块标签,因此analysis-template.Rmd第二次调用时编织失败.通过保留未命名的块可以避免此问题,因为将自动生成唯一标签.然而,这并不理想,因为我想使用块标签为导出的图创建信息文件名.


一个潜在的解决方案是使用一个简单的函数,将当前柱面附加到块标签:

```r{paste('cur-label', cyl, sep = "-")}
```
Run Code Online (Sandbox Code Playgroud)

但似乎knitr不会评估块标签位置的表达式.


我还尝试使用修改当前块标签的自定义块钩子: …

r knitr

40
推荐指数
2
解决办法
5816
查看次数

标签 统计

knitr ×1

r ×1