В последнее время у меня возникла странная проблема с 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
) к каждому столбцу этих данных. .frame
. Если data.frame
содержит только числовые
значения, у меня нет проблем:
apply(cars, 2, mean)
speed dist
15.40 42.98
Но при попытке с моим data.frame
, содержащим числовых
и символьных
данных, похоже, это не помогло:
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
для столбца символ
, но В любом случае я хотел бы получить значения для столбцов numeric
.
sapply(df, class)
speed dist foo
"numeric" "numeric" "factor"
Буду признателен за любые подсказки, так как мне кажется, что я упускаю здесь что-то очень очевидное!
> sessionInfo()
R version 2.14.1 (2011-12-22)
Platform: x86_64-unknown-linux-gnu (64-bit)
locale:
[1] LC_CTYPE=en_GB.UTF-8 LC_NUMERIC=C
[3] LC_TIME=en_GB.UTF-8 LC_COLLATE=en_GB.UTF-8
[5] LC_MONETARY=en_GB.UTF-8 LC_MESSAGES=en_GB.UTF-8
[7] LC_PAPER=C LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_GB.UTF-8 LC_IDENTIFICATION=C
attached base packages:
[1] stats graphics grDevices utils datasets methods base