написание функции для строки означает - PullRequest
1 голос
/ 11 июля 2020

Я пишу функцию, которая будет приводить к векторным средним строкам. Эта функция была успешно создана. Когда я применил это к фрейму данных. Результатом является NA.

row_mean<-function(x,removeNA=TRUE){
  ## determining number of rows
  nr<-nrow(x)
  ## initiate an empty vector
  means<-numeric(nr)
  for (i in 1:nr){
    means[i]<-mean(x[i,],na.rm = removeNA)
  }
  means
}
row_mean(airquality[,1:3])

Ответы [ 2 ]

1 голос
/ 11 июля 2020

Причина, по которой вы получаете NA, заключается в том, что x[i, ] все еще является фреймом данных. Среднее значение для фрейма данных не определено. Если вы unlist и сделаете его вектором, это даст вам среднее значение.

row_mean<-function(x,removeNA=TRUE){
    ## determining number of rows
    nr <- nrow(x)
    ## initiate an empty vector
    means <- numeric(nr)
    for (i in 1:nr){
      means[i]<-mean(unlist(x[i,]),na.rm = removeNA)
    }
     means
}

row_mean(airquality[,1:3])
# [1]  79.47  54.00  57.87 114.17  14.30  21.45 110.20  43.93  15.70 101.30
# [11]   6.95  93.90 103.40  99.63  32.07 119.83 117.67  34.13 121.17  21.57
#...
1 голос
/ 11 июля 2020

Вот тот, который работает.

row_mean2 <- function(x, removeNA = TRUE){
    means = list()
    for(i in 1:nrow(x)){
        means[i] <- mean(as.numeric(x[i,]), na.rm = removeNA)
    }
    unlist(means)
}
row_mean2(airquality[,1:3])

Edit

Ваш был очень близок. Причина, по которой ваш не работал, заключалась в том, что x[i,] не обрабатывался как numeri c. Вот рабочая версия вашей функции, где x[i,] обрабатывается как numeri c.

row_mean<-function(x,removeNA=TRUE){
    ## determining number of rows
    nr<-nrow(x)
    ## initiate an empty vector
    means<-numeric(nr)
    for (i in 1:nr){
        means[i]<-mean(as.numeric(x[i,]),na.rm = removeNA)
    }
    means
}
row_mean(airquality[,1:3])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...