2017-01-06 4 views
0

У меня есть серия таблиц и графиков, которые производятся из списка в R. Я хотел бы создать pdf для каждой итерации списка. Я пробовал просто использовать pdf() внутри функции, но я получаю ошибку, когда слишком много графических устройств открыты. Как я могу это сделать (и назовите файлы по имени элемента спискаКак распечатать PDF из функции

До сих пор я пытался:

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

lapply(mylist,ReportPDF) 

Я наклоняю достаточно работать, как прикрепить имя элемента списка в filename, и я даже не уверен, что это лучший способ создать pdf-файл из lapply.

+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() 
} 
Смежные вопросы