我通过两个变量dlply
和SITE
为绘图打印编写了SP
函数。在这个例子中,它打印了715个绘图,它们具有动态标题,如下面的代码所示:
p <- dlply(SUBTOT_DATE, .(SITE, SP), function(x) {
ggplot(x, aes(YEAR, SUMIA, group=SITE)) +
geom_point(size=3, color="red2") +
geom_line(size=1, color="red2") +
ggtitle(ggtitle(bquote(atop(.("Evolution de l'indice d'abondance"), atop(italic(.(paste(unique(as.character(x$SITE))," - ",unique(as.character(x$SP))))), ""))))) +
theme_bw() +
xlab("Année") +
ylab("Somme des IA") +
theme(legend.direction ="vertical",legend.position = "bottom") +
guides(color=guide_legend(ncol=2))
})
这很有效,我得到了正确的情节标题(SITE
和SP
的粘贴。)
我写的下一步是使用由SITE
和SP
组成的动态名称保存每个地块的循环:
for( i in 1:length(p)) {
filename<- paste(i, "_", unique(as.character(SUBTOT_DATE$SITE), "_",
unique(as.character(SUBTOT_DATE$SP)), ".png", sep="")
png(file=filename)
print(p[i])
dev.off()
}
出于某种原因,我必须在文件名中添加一个数字(迭代编号:i
),否则必须在某处发生冲突并且我的图表不会被保存。此代码正在运行并保存每个图形,其名称由两个变量组成。
但是文件名错了,并没有按照情节标题。这并不奇怪,因为这两个块之间没有联系。
我尝试将保存命令放入dlply
函数中,如下所示:
filename <- paste(unique(as.character(x$SITE)), "_",
unique(as.character(x$SP)), ".png", sep="")
这应该有效,但事实并非如此!由于某些原因,保存的所有图都是相同的。现在我无法确定它是否在情节标题后以正确的名称保存了地块。
我错过了语法错误吗?为什么只有一个图表多次保存?根据我在保存循环部分中遇到冲突问题的经验,我猜测应该通过简单地在文件名中添加一个数字来回答(即使它不能保存同名下的两个图,因为我没有双打) 。但我不知道如何在dlply中访问迭代次数以将其添加到文件名中。
由于每dlply
次迭代使用数百行,因此很难发布可重现的数据。
答案 0 :(得分:1)
如@rcs所述,您应该将打印循环更改为
for( i in 1:length(p)) {
filename<- paste(i, "_", unique(as.character(SUBTOT_DATE$SITE), "_",
unique(as.character(SUBTOT_DATE$SP)), ".png", sep="")
png(file=filename)
print(p[[i]])
dev.off()
}
原因是p
是一个列表,您想要提取列表中的每个图,而不是图表列表。当使用'['with lists时,你总是得到一个列表。