R 为什么ggplot2会覆盖列表中的绘图?

R 为什么ggplot2会覆盖列表中的绘图?,r,plot,ggplot2,R,Plot,Ggplot2,如果要创建ggplot对象列表,则每个新绘图都会覆盖旧绘图。这与被问到的问题类似。虽然我能够使用lappy解决这个问题,但我仍然无法理解为什么循环中的绘图会被覆盖 library(ggplot2) trash <- data.frame(matrix(rnorm(100), nrow = 50, ncol = 2)) colTrash <- data.frame(matrix(rnorm(100), nrow = 50, ncol = 2)) ##Overwritten: both

如果要创建ggplot对象列表,则每个新绘图都会覆盖旧绘图。这与被问到的问题类似。虽然我能够使用lappy解决这个问题,但我仍然无法理解为什么循环中的绘图会被覆盖

library(ggplot2)
trash <- data.frame(matrix(rnorm(100), nrow = 50, ncol = 2))
colTrash <- data.frame(matrix(rnorm(100), nrow = 50, ncol = 2))

##Overwritten: both plots are same
pltList <- list()
for(i in 1:2){
  pltList[[i]] <- ggplot(trash)+
    geom_point(aes(X1,X2,color = colTrash[,i]))
}

#Not Overwritten: plots are different and correct
pltList <- lapply(1:2, function(i){
  ggplot(trash)+
    geom_point(aes(X1,X2,color = colTrash[,i]))
})
库(ggplot2)

垃圾你遇到懒惰的评价!在循环中,只存储对函数的调用,而不计算它。当您尝试显示绘图时,会发生求值。为了说明这一点,首先运行循环,然后设置
iSo,这是否意味着在
lappy
的情况下,求值会立即发生?另外,懒惰评估的具体用途是什么?还有一些解决这个问题的问题。《高级R》一书中讨论了惰性评估。如果在循环中使用
force
(适当地),您可以强制它进行评估,事情将按预期运行。您遇到了惰性评估!在循环中,只存储对函数的调用,而不计算它。当您尝试显示绘图时,会发生求值。为了说明这一点,首先运行循环,然后设置
iSo,这是否意味着在
lappy
的情况下,求值会立即发生?另外,懒惰评估的具体用途是什么?还有一些解决这个问题的问题。《高级R》一书中讨论了惰性计算。如果在循环中使用
force
(适当地),可以强制它进行计算,事情将按预期运行。