2015-12-15 21 views
2

我在同一個目錄中有大約60個.Rdata文件。所有這些.Rdata中的對象名稱都是相同的。我想編寫一些代碼來加載和打印所有60個.Rdata文件和每個文件在新的頁面中。例如,如果文件名是file_1.rdatafile_2.rdatafile_3.rdata。所有三個.Rdata文件中的對象名稱是table。下面的代碼knitr顯示,正是我想要的,由R markdown和knitr在新頁面中加載並打印每張表格

>\```{r,echo=FALSE} 
>load("file_1.rdata") 
>print(table) 
>\``` 
>\pagebreak 
>\```{r,echo=FALSE} 
>load("file_2.rdata") 
>print(table) 
>\``` 
>\pagebreak 
>\```{r,echo=FALSE} 
>load("file_3.rdata") 
>print(table) 
>``` 
>\pagebreak 

但我有60多個文件,這是真的很難手工編寫所有的代碼。我可以在R塊中寫入循環,但是,如何爲每個.rdata文件創建一個新頁面?

for循環將是

>\```{r,echo=FALSE} 
>names <- c("file_1.rdata","file_2.rdata","file_3.rdata") 
>for(i in 1:length(names)){ 
> current_object <- names[i] 
> load(current_object) 
> print(table) 
>} 
>\``` 
+0

您能否更新您的問題以包括您所寫的'for'循環,以及哪些部分不工作的詳細信息? –

+0

謝謝你的建議。我已經寫了for循環。我不知道如何處理的部分是如何爲每個.rdata文件創建一個新頁面。 –

+0

請參閱[knitr'中循環內的[markdown'表格]](https://cran.r-project.org/web/packages/pander/vignettes/knitr.html#rendering-markdown-inside-loopvectorized功能)'pander'包裝的小插曲。 – daroczig

回答

4

你可以嘗試添加在cat("\n\n\\pagebreak\n")你的for循環,並results='asis'裏面的大塊電話:

```{r,echo=FALSE, results='asis'} 

names <- c("file_1.rdata","file_2.rdata","file_3.rdata") 
for(i in 1:length(names)){ 
    current_object <- names[i] 
    load(current_object) 
    print(table) 
    cat("\n\n\\pagebreak\n") 
} 

``` 

它爲我的作品與mtcars:

--- 
title: "test" 
output: pdf_document 
--- 

```{r, echo=FALSE, results='asis'} 
for (i in 1:3) { 
    print(mtcars) 
    cat("\n\n\\pagebreak\n") 
} 
``` 

注意您可能需要查看功能kable可以更好地格式化表格。或者使用library(xtable)

```{r, echo=FALSE, results='asis'} 
for (i in 1:3) { 
    print(xtable::xtable(mtcars), type = "latex") 
    cat("\n\n\\pagebreak\n") 
} 
``` 
+0

謝謝。有用。我能再問一個問題嗎?我應該如何處理表格中的行是否比頁面寬?即使一些參考也會幫助我很多,謝謝。 –

+0

查看這些[two](https://stackoverflow.com/questions/16507191/automatically-adjust-latex-table-width-to-fit-pdf-using-knitr-and-rstudio)[問題](https: //stackoverflow.com/questions/30417073/resizing-a-stargazer-table-in-knitr) – jeremycg

相關問題