qplot调用覆盖列表元素

时间:2014-04-06 14:19:03

标签: r ggplot2

运行R脚本

list1<-list()
list2<-list()

for(i in 1:3){
  list1[[i]]<-i
}

for(i in 1:3){
  list2[[i]]<-qplot(i)
}

我认识到list1包含元素1,2,3。但list2包含qplot(3)元素的三倍。

qplot与循环不兼容吗?如何使用循环将我的图保存在列表中?

1 个答案:

答案 0 :(得分:3)

ggplot中,美学被存储为表达式,并在渲染绘图时进行评估。因此,使用对变量qplot(i)的引用,i 生成绘图,而是生成绘图定义。所有三个图都是相同的,因为它们都引用i

如果您输入

list2[[1]]

在第二个循环运行后,您将使ggplot存储在list2[[1]]中的i对象被渲染,使用此时设置的任何值i <- 4 list2[[1]] (在此之后为3)循环)。

试试这个:

qplot(4)

现在渲染的图表相当于for(i in 1:3){ list2[[i]]<-ggplot(data.frame(x=i), aes(x))+geom_histogram() }

解决方法取决于您要实现的目标。基本思想不是在美学中使用外部变量。所以在你的小案例中,

i

会奏效。这是因为对外部变量aes(...)的引用在美学上是而不是(例如,对{{1}}的调用。