Я немного поиграл с функциями замены в R и сделал эту простую функцию, которая изменяет значение для среднего вектора.Он отлично работает на одном векторе:
'value.for.mean<-' <- function(x, value, ...) {
x[value] = mean(x, na.rm=TRUE)
x
}
x <- c(1:3,NA, 2:5,1:10, NA, NA)
value.for.mean(x) <- is.na(x)
x
#Output:
[1] 1.00 2.00 3.00 4.41 2.00 3.00 4.00 5.00 1.00 2.00 3.00 4.00
[13] 5.00 6.00 7.00 8.00 9.00 10.00 4.41 4.41
Когда я пытаюсь использовать ту же функцию с data.frame, я получаю сообщение об ошибке:
x <- data.frame(a=c(1,3,NA,4,2), b=c(9,8,5,4,NA))
value.for.mean(x) <- is.na(x)
Warning message:
In mean.default(x, na.rm = TRUE) :
argument is not numeric or logical: returning NA
Я прочитал много потоков в SO, которые ссылаются на эту ошибку, но никто не указывает на этот конкретный случай, поскольку мои переменные являются числовыми, как вы можете видеть при вызове str(x)
'data.frame': 5 obs. of 2 variables:
$ a: num 1 3 NA 4 2
$ b: num 9 8 5 4 NA
Заранее спасибо за вашеКомментарии.