2017-01-06 80 views
0

我有一系列從R中的列表生成的表和圖形。我想爲列表的每個迭代創建一個pdf。我已經嘗試在函數中簡單地使用pdf(),但我得到的錯誤是打開了太多的圖形設備。 ?我怎樣才能做到這一點(和命名文件根據列表元素名稱如何從函數中打印pdf

到目前爲止,我曾嘗試:

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

lapply(mylist,ReportPDF) 

我不能完全奏效瞭如何安裝列表元素的名稱爲文件名,我甚至不確定這是從lapply創建pdf的最佳方式

+0

嘗試在末尾添加'dev.off()'函數。 – ytk

+0

@ytk。我做到了。雖然 –

+0

我可能會對此使用'for'循環,並將循環包裝在'pdf'和'dev.off'中以獲取單個文件,或者將其放入循環以獲取多個文件。 – lmo

回答

4

你能清理一些嗎? 請給出一個更傳遞給ReportPDF()的對象的更具體的例子,我期望一個情節對象,而不是看起來像是你從中選擇一列的數據框。 有趣的ction示例也有一些錯誤,你的意思是?

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中列的名稱,而不是x的名稱,因爲它在mylist中,這正是你想要的。

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() 
}