r - apply() 为每一列提供 NA 值

标签 r apply

我在 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 时包含 numericcharacter数据,它似乎失败了:
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

当然,我期待得到NAcharacter列,但我想获取 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

最佳答案

?apply的描述的第一句说:

If X is not an array but an object of a class with a non-null dim value (such as a data frame), apply attempts to coerce it to an array via as.matrix if it is two-dimensional (e.g., a data frame) or via as.array.



矩阵在 R 中只能是单一类型。当数据框被强制转换为矩阵时,即使只有一个字符列,所有内容都以字符结束。

我想我欠你一个替代方案的描述,所以你去吧。数据框实际上只是列表,所以如果你想对每一列应用一个函数,使用 lapplysapply反而。

关于r - apply() 为每一列提供 NA 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9710484/

相关文章:

r - 如何更改 Rmarkdown 中元文件图形输出的尺寸?

r - 具有位置向量的向量子集列表

r - 从 GAM 预测 R 中分组数据帧的值

python - 应用函数仅适用于一列而不是多列?

python - 向量化 A 列 B 列的百分位数值(对于组)

gradle脚本,直接dsl和 “apply from:”的自定义函数调用有什么区别

r - 取一个具有特定均值的样本

html - R&Knitr html输出: Create collapsing and expanding header

r - R中的公式输入错误

r - 加速创建矩阵列表,每个矩阵都具有来自非常大矩阵的每一列的指定维度