p[[2]]<-ggplot(data = icadata, aes(x = icadata[[2]])) + geom_histogram()
p[[3]]<-ggplot(data = icadata, aes(x = icadata[[3]])) + geom_histogram()
p[[4]]<-ggplot(data = icadata, aes(x = icadata[[4]])) + geom_histogram()
p[[5]]<-ggplot(data = icadata, aes(x = icadata[[5]])) + geom_histogram()
p[[6]]<-ggplot(data = icadata, aes(x = icadata[[6]])) + geom_histogram()
p[[7]]<-ggplot(data = icadata, aes(x = icadata[[7]])) + geom_histogram()
p[[8]]<-ggplot(data = icadata, aes(x = icadata[[8]])) + geom_histogram()
p[[9]]<-ggplot(data = icadata, aes(x = icadata[[9]])) + geom_histogram()
p[[10]]<-ggplot(data = icadata, aes(x = icadata[[10]])) + geom_histogram()
p[[11]]<-ggplot(data = icadata, aes(x = icadata[[11]])) + geom_histogram()
p[[12]]<-ggplot(data = icadata, aes(x = icadata[[12]])) + geom_histogram()
p[[13]]<-ggplot(data = icadata, aes(x = icadata[[13]])) + geom_histogram()
p[[16]]<-ggplot(data = icadata, aes(x = icadata[[16]])) + geom_histogram()
p <- list()
for(i in c(2:13,16) ) {
p[[i]]<-ggplot(data = icadata, aes(x = icadata[[i]])) + geom_histogram()
}
上面的代码有什么区别?
为什么在运行for循环代码后总是得到相同的图片?
答案 0 :(得分:1)
如果您查看所获得的图,则它是最后出现的图。 ggplot2仅在调用该函数时对其求值。并且通过输入x值为icadata [[i]],ggplot2仅绘制icadata [[16]]。
因此,如果您确实需要使用for循环,则最好直接将其指向icadata中的列:
{{1}}
答案 1 :(得分:0)
python evaluate_performance.py
我尝试了构面,但是可行,但是我仍然困惑为什么不能使用该for循环代码获得绘图列表,除非像我的代码一开始那样逐一绘制它们。
答案 2 :(得分:0)
我已经能够使用mtcars
数据集重现观察到的行为。在我看来,似乎aes(x = icadata[[2]])
的指定方式可能是问题所在。
以下代码对我有用:
icadata <- as.data.frame(mtcars) # create reproducible data
library(ggplot2)
p <- list()
for(i in c(2:3, 6)) {
p[[i]] <- ggplot(data = icadata, aes(x = !!sym(names(icadata)[i]))) + geom_histogram()
}
输出是OP要求的列表
class(p)
[1] "list"
列表元素为空或ggplot
对象
lapply(p, class)
[[1]] [1] "NULL" [[2]] [1] "gg" "ggplot" [[3]] [1] "gg" "ggplot" [[4]] [1] "NULL" [[5]] [1] "NULL" [[6]] [1] "gg" "ggplot"
我能够通过以下方式绘制整个列表
lapply(p, print)
或带有例如
的单个图形p[[3]]
请注意,x轴由列名标记,例如disp
而不是icadata[[3]]
。
如果需要,可以用对for
的调用代替lapply()
循环,该调用返回一个list
对象,该对象没有空元素。此外,可以适当地命名列表元素。
cols <- names(icadata)[c(2:3, 6)]
p2 <- lapply(
cols,
function(col) ggplot(data = icadata, aes(x = !!sym(col))) + geom_histogram()
)
names(p2) <- paste0(cols, "_histogram")
lapply(p2, class)
$cyl_histogram [1] "gg" "ggplot" $disp_histogram [1] "gg" "ggplot" $wt_histogram [1] "gg" "ggplot"
答案 3 :(得分:-2)
在for循环之前,您可能需要创建所需大小的空列表。
p <- vector(length = length(c(2:13,16)), mode = "list")