Использование цикла for в R: вычисление значения столбца - PullRequest
0 голосов
/ 31 августа 2018

Я пытался выполнить упражнение «вычислить среднее значение каждого столбца в mtcars». Я знаю, что самый простой способ - это использовать colmeans()

colMeans(mtcars)

но я все еще хочу выяснить путь с помощью цикла for. Вот мой код, но не работает. Я пытался много раз, но не могу найти ошибку (довольно расстраивает ...). Ваш ответ будет высоко оценен. Спасибо.

for (i in c(1:11)) {   #mtcars has 11 columns
    y1<-mean(mtcars[,i])
    y2<-c(y1,y2)
}
y2

Kate


Большое спасибо за ответы. Следуя онлайн-комментариям, я обновил код следующим образом:

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) на ... </p>

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 () !!

Еще раз всем спасибо за помощь !!

Kate

1 Ответ

0 голосов
/ 31 августа 2018

Вот стандартный способ сделать это с помощью цикла:

# 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)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...