如何使用Knitr使用for循环生成pdfs?

时间:2017-08-23 03:07:22

标签: r latex knitr

我编写了一个R脚本来读取csv文件中的数据,并使用以下代码将这些数据打印到不同的Word Doc(docx)文件中。这是按预期工作没有任何故障。但我不知道要实现的是使用'knitr'或'sweave'来输出pdf文件。有人可以指导我如何使脚本输出pdf文件而不是docx?

<tomcat>/bin

2 个答案:

答案 0 :(得分:0)

您可以使用gridExtra包:

library(gridExtra)
library(stringr)

lff <- list.files(path = "./data/", pattern = paste('*.csv*',sep=""), 
                  full.names = TRUE, recursive = TRUE, include.dirs = TRUE) 

for (i in lff) {
  dt <- read.csv(i, header=TRUE)
  pdf(paste0(str_replace(i, '.csv', ''),'.pdf'), height=11, width=8.5)
  grid.table(dt)
  dev.off()
}

答案 1 :(得分:0)

这是针对具有Sweave的knitr的解决方案,因为你需要循环一些东西,比如i,基于你的Script.Rnw会产生不同的结果,其他明智的循环将是无用的。请参阅以下代码:

## elements in `names` could also be parameters in your `Script.Rnw`
names<-c('first','second','third')
for (i in names) {
  output.name<-paste0(i,'.tex')
  knit2pdf('Script.Rnw',output = output.name)
} 

最后你会得到'first.pdf','second.pdf','third.pdf' 对于shiva的情况,名称中的元素可以是她的csv文件的名称。根据@giac_man的评论,您可以在.Rnw文件中编写如何读取csv文件,因为它们是csv我想你可以在xtable文件中使用.Rnw也打印你的csv文件,还需要LateX来获取这些PDF,我目前正在使用MikTex。