У меня недавно была странная проблема с apply
.Рассмотрим следующий пример:
set.seed(42)
df <- data.frame(cars, foo = sample(LETTERS[1:5], size = nrow(cars), replace = TRUE))
head(df)
speed dist foo
1 4 2 E
2 4 10 E
3 7 4 B
4 7 22 E
5 8 16 D
6 9 10 C
Я хочу использовать apply
, чтобы применить функцию fun
(скажем, mean
) к каждому столбцу этого data.frame
.Если data.frame
содержит только numeric
значений, у меня нет проблем:
apply(cars, 2, mean)
speed dist
15.40 42.98
Но при попытке с моими data.frame
, содержащими numeric
и character
данные, кажется,fail:
apply(df, 2, mean)
speed dist foo
NA NA NA
Warning messages:
1: In mean.default(newX[, i], ...) :
argument is not numeric or logical: returning NA
2: In mean.default(newX[, i], ..) :
argument is not numeric or logical: returning NA
3: In mean.default(newX[, i], ...) :
argument is not numeric or logical: returning NA
Конечно, я ожидал получить NA
для столбца character
, но я все равно хотел бы получить значения для столбцов numeric
.
sapply(df, class)
speed dist foo
"numeric" "numeric" "factor"
Любые указатели будут оценены, так как я чувствую, что упускаю что-то очень очевидное здесь!