该行为是由于 R 的惰性计算造成的。
这是一个最小的(?)示例:
d <- 1:3
args.list <- NULL;
plot.list <- NULL;
for (m in 1:3) {
plot.list <- c(plot.list, list(qplot(d[m], d[m], ylab=letters[m])))
}
args.list <- c(plot.list, nrow=1, ncol=3)
do.call(grid.arrange, args.list)
在这种情况下,d[m]
在调用时进行评估do.call
. so m
所有面板的值为 3。
这是一个解决方法:
d <- 1:3
args.list <- NULL;
plot.list <- NULL;
for (m in 1:3) {
plot.list <- c(plot.list,
list(qplot(d, d, data=data.frame(d=d[m]), ylab=letters[m])))
}
args.list <- c(plot.list, nrow=1, ncol=3)
do.call(grid.arrange, args.list)
在这种情况下,d[m]
在调用时进行评估qplot
,以及d[m]
存储在qplot的输出对象中。
所以,简单的解决方案是将数据传递给qplot()
or ggplot()
.