2013-09-29 39 views
5

組塊的動態數我有這樣一個清單:調用具有knitr

> 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文件;第一個調用第二個,第二個遞歸調用自身:

mainfile.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} 
``` 

這恰好產生繪製我想要:

enter image description here

我喜歡這個棘手的解決方案,但我想知道是否存在非遞歸解決方案?

+0

通過有有如果一個人想包括一些內嵌R代碼裏面這個解決方案的問題的方式:HTTPS: //github.com/yihui/knitr/issues/613 –

+1

https://github.com/yihui/knitr-examples上有很多例子:020,069,075,...請隨時回答你自己的問題你學習這些例子。 –

+0

謝謝@怡輝,它工作正常! –

回答

5

下面是與https://github.com/yihui/knitr-examples/blob/master/020-for-loop.Rnw類似的使用knit_child()的RMarkdown解決方案。作爲我的解決方案,它需要兩個文件,但它更清晰。

mainfile.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! 

stepfile.Rmd:

```{r, echo=FALSE} 
lSlopes[[i]] 
```