在for循环中打印到PDF

时间:2011-05-04 10:46:34

标签: r pdf loops for-loop pdf-generation

我想循环绘制一个情节,并将情节结果放在PDF

以下代码用于执行此操作:

这样做是循环3次并从虹膜数据集中绘制3个不同的图。然后它应该将其保存到C:/驱动器。 PDF文件已创建,但已损坏。

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

2 个答案:

答案 0 :(得分:50)

要在设备上绘制点阵图,需要打印通过调用其中一个点阵图形函数生成的对象。通常,在交互式使用中,如果未分配,R会自动打印对象。但是在循环中,自动打印不起作用,因此必须安排打印对象,通常是将其包装在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设备上生成三个图。

答案 1 :(得分:3)

在您的操作系统上包含“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()
}