【发布时间】:2019-03-06 20:25:05
【问题描述】:
这是我遇到的一个问题的简化版本:
grob.list <- vector("list", length = 2)
for (i in 1:2) {
grob.list[[i]] <- qplot(1:5, 1:5 * (-1)^i)
}
grid.arrange(grobs = grob.list)
我们得到两个相同的图表(grob.list[[1]] 是错误的)。
如果我们打印(甚至是不可见的)grobs 就会正确显示。
grob.list <- vector("list", length = 2)
for (i in 1:2) {
grob.list[[i]] <- qplot(1:5, 1:5 * (-1)^i)
invisible(print(grob.list[[i]]))
}
grid.arrange(grobs = grob.list)
那么打印是否会强制 ggplot 对象“定居”?打印一个 ggplot 对象实际上对它有什么影响?
似乎与Grid of multiple ggplot2 plots which have been made in a for loop 相关,但没有说明打印的作用。
【问题讨论】:
-
printing 强制评估参数
i,否则 R 的惰性评估会延迟查找它的值,直到绘图渲染时间,此时它只是 2。添加行force(i)作为问题的原始版本中plot.g的第一行将解决它。 -
在这种情况下,
lapply实际上会为您执行参数强制:l <- lapply(1:2,function(i) qplot(1:5, 1:5 * (-1)^i))。 -
@joran 你能发帖回答吗?