apply() дает значения NA для каждого столбца

В последнее время у меня возникла странная проблема с 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
5
задан Pierre 14 March 2012 в 21:22
поделиться