在R中使用for循环:计算列均值

时间:2018-08-31 07:23:23

标签: r for-loop

我尝试进行“计算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()中的结果匹配!

再次感谢大家的帮助!

凯特

1 个答案:

答案 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)
}