2015-06-17 2 views
1

Я собирал отчеты, используя Knitr и rmarkdown. Мне нравится выдавать свой R-код в воспроизводимом R-формате, однако я постоянно сталкиваюсь с ограничениями, и мне интересно, кто это занял раньше. Мне нужно зациклиться на двух страницах с различными настройками содержания и книжки для каждой коллекции данных в списке. После написания кода для этих двух страниц я хотел бы заполнить i для каждой коллекции в списке (1, 2, 3, 4, 5 и т. Д.).Зацикливание кода в knitr и rmarkdown

Для примера ниже у меня есть master_list, в котором есть x1_list & x2_list. В настоящее время я устанавливаю переменную num перед каждым набором кода и соответственно изменяю число (1, 2, 3 и т. Д.). Это неэффективно, так как код все равно, просто вставлен дважды. Как лучше всего прокрутить код.

Чтобы быть яснее. Я хочу, чтобы цикл через код до того, как много раз, как их элементы в master_list (сейчас только два раза), без перезаписи кода каждый раз.

Часть кода Я хочу повторить (полный воспроизводимый пример ниже)

## Name `r num`: First Table 

\vspace*{0.5in} 

```{r echo = F, results = 'asis', message = F, warning = F, fig.width = 8, fig.height = 8, size = 'Large'} 
library(xtable) 
print(xtable(master_list[[num]][[1]]),type='latex',comment = FALSE,floating=FALSE) 

``` 

\newpage 

## Manager `r num`: Second Table 

```{r echo = F, results = 'asis', message = F, warning = F, fig.align = 'center', fig.width = 9, fig.height = 7, fig.show = 'hold', size = 'Large'} 

print(xtable(master_list[[num]][[2]]),type='latex',comment = FALSE,floating=FALSE) 
```  

\newpage 

Ниже приведен пример файла .Rmd работает в Rstudio (я нажимаю Вязать PDF для создания отчета в формате PDF с 4 страниц) ,

--- 
output: 
    pdf_document: 
     includes: 

classoption: landscape 
geometry: margin=1.75cm 
--- 

`r x1_list <- list(x1_front <- data.frame("col1" = rnorm(10), "col2" = rnorm(10)), x1_back <- data.frame("col1" = rnorm(10), "col2" = rnorm(10))) ` 
`r x2_list <- list(x2_front <- data.frame("col1" = rnorm(10), "col2" = rnorm(10)), x2_back <- data.frame("col1" = rnorm(10), "col2" = rnorm(10))) ` 
`r master_list <- list(x1_list, x2_list) ` 

`r num <- 1` 

## Name `r num`: First Table 

\vspace*{0.5in} 

```{r echo = F, results = 'asis', message = F, warning = F, fig.width = 8, fig.height = 8, size = 'Large'} 
library(xtable) 
print(xtable(master_list[[num]][[1]]),type='latex',comment = FALSE,floating=FALSE) 

``` 

\newpage 

## Manager `r num`: Second Table 

```{r echo = F, results = 'asis', message = F, warning = F, fig.align = 'center', fig.width = 9, fig.height = 7, fig.show = 'hold', size = 'Large'} 

print(xtable(master_list[[num]][[2]]),type='latex',comment = FALSE,floating=FALSE) 
```  

\newpage 

`r num <- 2` 

## Name `r num`: First Table 

\vspace*{0.5in} 

```{r echo = F, results = 'asis', message = F, warning = F, fig.width = 8, fig.height = 8, size = 'Large'} 

print(xtable(master_list[[num]][[1]]),type='latex',comment = FALSE,floating=FALSE) 

``` 

\newpage 

## Manager `r num`: Second Table 

```{r echo = F, results = 'asis', message = F, warning = F, fig.align = 'center', fig.width = 9, fig.height = 7, fig.show = 'hold', size = 'Large'} 

print(xtable(master_list[[num]][[2]]),type='latex',comment = FALSE,floating=FALSE) 
```  

ответ

4

Для тех, кто найти этот вопрос, я наконец-то нашел надежный способ перебрать уценки/латексной код на гибкой основе, надеюсь, что это помогает. В основном вы можете поместить свою информацию о заголовке/нижнем колонтитуле rmarkdown, а затем поместить каждый конкретный код элемента цикла в дочерний элемент. При одном вызове цикла он будет генерировать столько дочерних элементов, сколько вы хотите, повторно используя этот код каждый раз.

Код для main.Rmd

--- 
    output: 
    pdf_document: 
    includes: 

    classoption: landscape 
geometry: margin=1.75cm 
--- 

    `r x1_list <- list(x1_front <- data.frame("col1" = rnorm(10), "col2" = rnorm(10)), x1_back <- data.frame("col1" = rnorm(10), "col2" = rnorm(10))) ` 
`r x2_list <- list(x2_front <- data.frame("col1" = rnorm(10), "col2" = rnorm(10)), x2_back <- data.frame("col1" = rnorm(10), "col2" = rnorm(10))) ` 
`r master_list <- list(x1_list, x2_list) ` 


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

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

Код для child.Rmd

\newpage 

## Name `r num`: First Table 

\vspace*{0.5in} 

```{r echo = F, results = 'asis', message = F, warning = F, fig.width = 8, fig.height = 8, size = 'Large'} 
library(xtable) 
print(xtable(master_list[[num]][[1]]),type='latex',comment = FALSE,floating=FALSE) 

``` 

\newpage 

## Manager `r num`: Second Table 

```{r echo = F, results = 'asis', message = F, warning = F, fig.align = 'center', fig.width = 9, fig.height = 7, fig.show = 'hold', size = 'Large'} 

print(xtable(master_list[[num]][[2]]),type='latex',comment = FALSE,floating=FALSE) 
```  
+0

Это было полезно спасибо –

Смежные вопросы