我有一系列从R中的列表生成的表格和图形。我想为列表的每个迭代创建一个pdf。我试过在函数中简单地使用pdf(),但是我得到太多图形设备打开的错误。我该怎么做(并根据列表元素名称命名文件?
到目前为止,我已经尝试过:
ReportPDF<-function(x){
pdf(paste(name(x),"~\\Myfile.pdf")
tb<-table(x$acolumn)
print(fb)
}
lapply(mylist,ReportPDF)
我无法弄清楚如何将list元素的名称附加到文件名中,我甚至不确定这是从lapply创建pdf的最佳方法
答案 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()
}