2013-09-29 16 views
5

tôi có một danh sách như vậy:số động các cuộc gọi đến một đoạn với 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 

Nó có ba yếu tố nhưng chiều dài của nó có thể thay đổi (theo dữ liệu không được hiển thị ở đây). Tôi muốn hiển thị từng phần tử trong một đoạn.

Ý tưởng đầu tiên của tôi là viết một đoạn có chứa vòng gọi knit_child() ở mỗi bước, nhưng tôi không biết cách hiển thị chính xác với knit_child().

Tôi đã tìm giải pháp sau hoạt động tốt nhưng yêu cầu hai tệp Rmd; là người đầu tiên gọi thứ hai và thứ hai đệ quy gọi chính nó:

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

này chính xác tạo ra vẽ Tôi muốn:

enter image description here

Tôi thích giải pháp khôn lanh này nhưng tôi tự hỏi liệu có tồn tại một giải pháp không đệ quy không?

+0

Bằng cách có một vấn đề với giải pháp này nếu ai muốn bao gồm một số mã R inline: https: //github.com/yihui/knitr/issues/613 –

+1

Rất nhiều ví dụ tại https://github.com/yihui/knitr-examples: 020, 069, 075, ... Vui lòng trả lời câu hỏi của riêng bạn sau bạn học những ví dụ này. –

+0

Cảm ơn bạn @ Yihui, nó hoạt động tốt! –

Trả lời

5

Dưới đây là giải pháp RMarkdown tương tự như https://github.com/yihui/knitr-examples/blob/master/020-for-loop.Rnw, sử dụng knit_child(). Theo giải pháp của tôi, nó đòi hỏi hai tệp, nhưng nó rõ ràng hơn nhiều.

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]] 
``` 
Các vấn đề liên quan