【问题标题】:Load and print every table in new page by R markdown and knitr通过 R markdown 和 knitr 在新页面中加载和打印每个表格
【发布时间】:2015-12-15 01:28:48
【问题描述】:

我在同一目录中有大约 60 个 .Rdata 文件。所有这些 .Rdata 中的对象名称都是相同的。我想编写一些代码来加载和打印所有 60 个 .Rdata 文件和新页面中的每个文件。例如,如果文件名为file_1.rdatafile_2.rdatafile_3.rdata。所有三个 .Rdata 文件中的对象名称都是 table。下面的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 块中编写 for 循环,但是,如何为每个 .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)  
>}  
>\```  

【问题讨论】:

  • 您能否更新您的问题以包含您编写的for 循环,并详细说明哪个部分不起作用?
  • 感谢您的建议。我已经编写了 for 循环。我不怎么处理的部分是如何为每个 .rdata 文件创建一个新页面。
  • 请注意,也有一些方法可以使用 R 命令来探索文件目录。如果您的目录包含您要加载的文件,那么您可以执行以下操作:names &lt;- dir()names &lt;- list.files()。 (这些命令也支持正则表达式文件名模式匹配;请参阅帮助文件。)

标签: r markdown knitr


【解决方案1】:

您可以尝试在 for 循环中添加 cat("\n\n\\pagebreak\n"),并将 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")
}
```

【讨论】:

  • 谢谢。有用。我可以再问一个问题吗?如果表格中的行比页面宽,我应该如何处理?即使是一些参考也会对我有很大帮助,谢谢。
  • 看看这些twoquestions
猜你喜欢
  • 2020-11-10
  • 2014-02-19
  • 1970-01-01
  • 2021-10-04
  • 2019-04-14
  • 1970-01-01
  • 1970-01-01
  • 2017-10-11
  • 1970-01-01
相关资源
最近更新 更多