gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 16:35:39 24 4
gpt4 key购买 nike

我在 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com