运行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与循环不兼容吗?如何使用循环将我的图保存在列表中?
答案 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}}的调用。