Print to PDF in a for loop
To drawn lattice plots on the device, one needs to print the object produced by a call to one of the lattice graphics functions. Normally, in interactive use, R auto prints objects if not assigned. In loops however, auto printing does not work, so one must arrange for the object to be printed, usually by wrapping it in print()
.
Here is an example (please excuse my abuse of the formula notation ;-):
require(lattice)for(i in 1:3) { pdf(paste("plot", i, ".pdf", sep = "")) print(xyplot(iris[,1] ~ iris[,i], data = iris)) dev.off()}
This produces the three plots on a pdf
device.
Is a file name that contains "c:/" a valid file name on your OS? That looks like part of the working directory that you'd want to set before calling pdf
. I get an error telling me it can't open that file:
Error in pdf(paste("c:/", i, ".pdf", sep = "")) : cannot open file 'c:/1.pdf'
If I drop the "c:/" bit from the file name, three PDFs are generated properly. Also, if you move the dev.off()
outside of the for loop, you'll get a single PDF with three pages instead of three PDFs. May or may not be what you want...
for(i in 1:3){ pdf(paste("plot", i,".pdf",sep="")) plot(cbind(iris[1],iris[i])) dev.off()}