如何从函数中打印pdf

时间:2017-01-06 17:16:19

标签: r

我有一系列从R中的列表生成的表格和图形。我想为列表的每个迭代创建一个pdf。我试过在函数中简单地使用pdf(),但是我得到太多图形设备打开的错误。我该怎么做(并根据列表元素名称命名文件?

到目前为止,我已经尝试过:

ReportPDF<-function(x){
pdf(paste(name(x),"~\\Myfile.pdf")
tb<-table(x$acolumn)
print(fb)
}

lapply(mylist,ReportPDF)

我无法弄清楚如何将list元素的名称附加到文件名中,我甚至不确定这是从lapply创建pdf的最佳方法

1 个答案:

答案 0 :(得分:4)

你可以清理一些吗? 请提供一个更具体的例子,说明您传递给ReportPDF()的对象,我希望有一个绘图对象,而不是您正在从中选择列的数据框。 函数示例也有一些错误,你是说这个吗?

ReportPDF<-function(x){
pdf(paste(names(x),"Myfile.pdf"))
tb<-table(x$acolumn)
print(tb)
dev.off()
}

lapply(mylist,ReportPDF)

我相信我以前做过类似的事情,并且在得到其他信息后可以更新这个答案。

这是一个更新,对您的对象做出一些假设。它使用for循环作为lmo建议,但我认为必须存在更优雅的方法。我正在使用for循环,因为lapply传递了列表中每个元素内的对象,而没有引用列表中元素的名称 - 这就是您需要单独命名文件的方法。请注意调用mylist[i]mylist[[i]]之间的区别,这是违反示例中代码的一部分。在您的代码中,names(x)将获取x中列的名称,而不是mylist中的x的名称,这就是您想要的。

x <- data.frame(acolumn = rnorm(10))
q<- data.frame(acolumn = rnorm(10))

mylist <- list(a = x,b = q)


for(i in seq_along(mylist) ){
  filename <- paste(names(mylist[i]),'-myFile.pdf', sep = "")
  pdf(filename)
  plot(myList[[i]]$acolumn)
  dev.off()
}