【发布时间】:2017-06-12 12:16:34
【问题描述】:
我正在循环中工作,我想将绘图保存在一个列表中,以便我可以将它们一起绘制在一个 .pdf 中。问题是该列表未正确填写并使用上次运行的结果重新更新。所以,最后我得到的是一个包含五个完全相同的元素的列表。
我知道循环可能看起来毫无用处,但我只是让它们创建一个尽可能接近真实代码的测试代码(带有可重现的错误)。所以,我需要让循环保持原样。
library (ggplot)
library (gridExtra)
plist <- list()
for (z in 1:5){
n <- 100
k <- seq(0, to=4500+z*2000, length=n)
tmp <- numeric(n)
for (i in 1:n){
tmp[i] <- (5*(i*3)^2)}
plist[[z]] <- ggplot() +
geom_line(aes(x = k, y = tmp)) +
theme_bw()
pdf(sprintf("p%s.pdf", z),
width = 6, height = 4, onefile = T)
plot(plist[[z]])
dev.off()
}
do.call(grid.arrange, c(plist, ncol = 5))
【问题讨论】:
-
你能在你的for循环中使用
p[z]吗? -
是的,为什么不将图保存到列表中呢?这样您以后就不需要将它们放入列表中以便一起绘制。
-
在一个地方你已经分配给 sprintf("p%s", z) 但是当你尝试
get时你使用 "p_%s"。 -
这就是我尝试做的事情,当我创建 listp... 有没有更好的方法?
-
第一次通过循环尝试获取一个不存在的对象,即错误消息所述的
p2。你真的想要两个循环:一个用于创建,另一个用于访问绘图?另外:grid.arrange不在 pkg-ggplot2 中。