我尝试进行“计算mtcars中每一列的平均值”的练习。我知道最简单的方法是使用colmeans()
colMeans(mtcars)
但是我仍然想通过使用for循环找出方法。这是我的代码,但是不起作用。我已经尝试了很多次,但是无法找出错误(非常令人沮丧...)。 您的答复将不胜感激。谢谢。
for (i in c(1:11)) { #mtcars has 11 columns
y1<-mean(mtcars[,i])
y2<-c(y1,y2)
}
y2
凯特
非常感谢您的答复。 根据在线评论,我将代码更新如下:
y2<-numeric()
for (i in seq_along(mtcars)) {
y1<-mean(mtcars[,i])
y2<-c(y1,y2)
}
y2
[1] 2.812500 3.687500 0.406250 0.437500 17.848750 3.217250
[7] 3.596563 146.687500 230.721875 6.187500 20.090625
如果使用colMeans()...
colMeans(mtcars)
mpg cyl disp hp drat wt qsec
20.090625 6.187500 230.721875 146.687500 3.596563 3.217250 17.848750
vs am gear carb
0.437500 0.406250 3.687500 2.812500
看到列表完全相反(与第一部分的代码相比),这很有趣。然后我发现y2 <-c(y1,y2)中的问题 如果我将原始y2 <-c(y1,y2)更改为...
y2<-c(y2,y1)
最终版本。...
y2<-numeric()
for (i in seq_along(mtcars)) {
y1<-mean(mtcars[,i])
y2<-c(y2,y1)
}
y2
[1] 20.090625 6.187500 230.721875 146.687500 3.596563 3.217250
[7] 17.848750 0.437500 0.406250 3.687500 2.812500
此结果最终与colMeans()中的结果匹配!
再次感谢大家的帮助!
凯特
答案 0 :(得分:1)
这是循环执行的标准方法:
# Extract the number of columns
ncols <- length(mtcars)
# Initialize your mean vector (this will make the loop run much faster)
column_means <- vector(mode = "numeric", length = ncols)
# Now loop through each column
for (i in 1:ncols) {
column_means[i] <- mean(mtcars[[i]])
}
# Why not turn our mean vector into a named vector so we can better make sense
# of the numbers
names(column_means) <- names(mtcars)
column_means
mpg cyl disp hp drat wt qsec vs am gear
20.090625 6.187500 230.721875 146.687500 3.596563 3.217250 17.848750 0.437500 0.406250 3.687500
carb
2.812500
但是如何使原始代码正常工作?
y2 <- NULL
for (i in c(1:11)) { #mtcars has 11 columns
y1<-mean(mtcars[,i])
y2<-c(y2, y1)
}