Печать в PDF в цикле for

Я хочу перебрать график и поместить результат графика в PDF.

Для этого используется следующий код:

То, что это делает, является петлей 3 раза и отображает 3 разных графика из набора диафрагмы. Затем он должен сохранить его на диске C:/. Файлы PDF создаются, но повреждены.

for(i in 1:3){
  pdf(paste("c:/", i, ".pdf", sep=""))
  plot(cbind(iris[1], iris[i]))
  dev.off()
}

Ответ 1

Чтобы нарисовать графики решетки на устройстве, нужно напечатать объект, созданный вызовом одной из функций графической графики. Обычно, при интерактивном использовании, R auto печатает объекты, если они не назначены. Однако в циклах автоматическая печать не работает, поэтому необходимо организовать печать объекта, как правило, обернув его в print().

Вот пример (пожалуйста, извините мое злоупотребление нотной формулой;):

require(lattice)
for(i in 1:3) {
    pdf(paste("plot", i, ".pdf", sep = ""))
    print(xyplot(iris[,1] ~ iris[,i], data = iris))
    dev.off()
}

Это создает три графика на устройстве pdf.

Ответ 2

Является ли имя файла, содержащее "c:/" допустимое имя файла в вашей ОС? Это выглядит как часть рабочего каталога, который вы хотите установить перед вызовом pdf. Я получаю сообщение о том, что он не может открыть этот файл:

Error in pdf(paste("c:/", i, ".pdf", sep = "")) : 
  cannot open file 'c:/1.pdf'

Если я удаляю бит "c:/" из имени файла, три файла PDF генерируются должным образом. Кроме того, если вы перемещаете dev.off() вне цикла for, вы получите один PDF файл с тремя страницами вместо трех PDF файлов. Может или не может быть то, что вы хотите...

for(i in 1:3){
  pdf(paste("plot", i,".pdf",sep=""))
  plot(cbind(iris[1],iris[i]))
  dev.off()
}