R:自动保存多个设备的图

时间:2015-03-09 19:40:25

标签: r

我正在使用R中的双层次广义线性模型,我想保存模型的诊断图以供以后检查。当我以循环方式运行多个模型时,我需要一个自动化解决方案。 下面我举一个例子,

library(hglm)
y<-rnorm(1000)
A<-sample(1:5,1000,replace=TRUE)
B<-sample(1:3,1000,replace=TRUE)
X<-model.matrix(~A)
Z<-model.matrix(~B)
model<-hglm(y=y,X=X,Z=Z,X.disp=X)

为了获得诊断图,我按照广义线性模型编写命令,

plot(model)

但是,在这种特定情况下,我在四个独立的设备中获得了这些图。问题是我无法全部保存。我已经尝试过常规操作,

pdf('Test plots from multiple devices.pdf')
plot(model)
dev.off()

但是没有任何内容打印到文件中。我也试过

pdf('Test plots from multiple devices.pdf')
print(plot(model))
dev.off()

也不起作用。然后,我尝试通过在保存之前选择不同的设备,将每个窗口一次保存在单个文件中。鉴于设备1是null.device,图表出现在设备2到5中。因此,我这样做了,

pdf('Test plots from multiple devices 1.pdf')
dev.set(2)
dev.off()

pdf('Test plots from multiple devices 2.pdf')
dev.set(3)
dev.off()

pdf('Test plots from multiple devices 3.pdf')
dev.set(4)
dev.off()

pdf('Test plots from multiple devices 4.pdf')
dev.set(5)
dev.off()

结果相同。如果我打印选项,则没有任何变化,例如,

pdf('Test plots from multiple devices 1.pdf')
print(dev.set(2))
dev.off()

希望你知道如何做到这一点。 非常感谢!一切顺利。

1 个答案:

答案 0 :(得分:2)

这个图书馆拥有自己的自定义绘图功能,其行为方式与&#34;标准&#34;相同。绘图功能。如果你看看

?plot.hglm

帮助页面。您会看到有一个device=参数。尝试像

这样的东西
plot(model, device="pdf", name="TestPlots.pdf")

否则,如果要从现有设备复制内容,可以执行以下操作。运行后

plot(model)

你可能会得到像

这样的东西
dev.list()
# windows windows windows windows 
#       2       3       4       5 

然后,要将内容复制到其中一个设备,您可以执行

pdf("out.pdf")
dx <- dev.cur()
dev.set(2)
dev.copy(which=dx)
dev.set(dx)
dev.off()
例如,

复制设备2。

要将所有打开的图形设备保存为相同的pdf,您可以设置一个类似

的循环
open.dev <- dev.list()
pdf("ok.pdf")
dx <- dev.cur()
for(d in open.dev) {
    dev.set(d)
    dev.copy(which=dx)
}
dev.set(dx)
dev.off()

最后一个选项,您可以使用此辅助函数

dev.copyfrom <- function(from, to=dev.cur()) {
    stopifnot(from %in% dev.list())
    stopifnot(from!=to)
    dx <- dev.cur()
    dev.set(from)
    dev.copy(which=to)
    dev.set(dx)
}

将内容从特定设备复制到当前(或其他)指定设备)。然后就可以了

pdf("out1.pdf")
dev.copyfrom(2)
dev.off()
pdf("out2.pdf")
dev.copyfrom(3)
dev.off()

等等,如果你想要每个文件都有不同的文件。