7

我有这样一个清单:

> lSlopes
$A
  Estimate 2.5 % 97.5 %
1     2.12 -0.56   4.80

$B
  Estimate 2.5 % 97.5 %
1     2.21 -0.68   5.10

$C
  Estimate 2.5 % 97.5 %
1     2.22 -2.21   6.65

它具有三个元素,但它的长度可以改变(根据此处未显示的数据)。我想在一个块中显示每个元素。

我的第一个想法是编写一个包含在每个步骤中调用的循环的块knit_child(),但我不知道如何使用knit_child().

我发现以下解决方案效果很好,但需要两个Rmd文件;第一个调用第二个,第二个递归调用自身:

主文件.Rmd

```{r, echo=FALSE}
J <- length(lSlopes)
i <- 1
```

```{r child, child="stepfile.Rmd"}
```
Nice!

stepfile.Rmd

```{r, echo=FALSE}
lSlopes[[i]]
i <- i+1
```

```{r child, child="stepfile.Rmd", eval= i <= J}
```

这正是生成我想要的渲染:

在此处输入图像描述

我喜欢这个棘手的解决方案,但我想知道是否存在非递归解决方案?

4

1 回答 1

7

下面是类似于https://github.com/yihui/knitr-examples/blob/master/020-for-loop.Rnw的 RMarkdown 解决方案,使用knit_child(). 作为我的解决方案,它需要两个文件,但它更清晰。

主文件.Rmd:

```{r, echo=FALSE}
J <- length(lSlopes)
```

```{r runall, include=FALSE}
out <- NULL
for (i in 1:J) {
  out <- c(out, knit_child('stepfile.Rmd'))
}
```

`r paste(out, collapse = '\n')` 

Nice!

步骤文件.Rmd:

```{r, echo=FALSE}
lSlopes[[i]]
```
于 2013-10-03T10:03:03.360 回答