gpt4 book ai didi

r - 为什么在 apply() 和 sapply() 中使用 is.factor() 返回不同的值?

转载 作者:行者123 更新时间:2023-12-04 09:22:30 27 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





apply() not working when checking column class in a data.frame

(1 个回答)



Why does as.factor return a character when used inside apply?

(1 个回答)


去年关闭。




我的目标是获得一个 bool 值向量来指示 data.frame 中的每一列是否是一个因子,我使用了 is.factor()sapply()apply()函数,似乎它们返回不同的值,而 apply()返回错误的值。有人能告诉我是什么导致了差异吗?

X <- data.frame(X1=c(1,2,3,4), ## numeric
X2=factor(paste0("f",c(1:4))) ## factor)

sapply(X, is.factor)
## FALSE TRUE

apply(X, 2, is.factor)
## FALSE FALSE // apparently this is wrong, the second value is supposed to be TRUE.
同样的事情发生在其他函数上,比如 class() , is.numeric() .

最佳答案

来自 apply 的引用:

Returns a vector or array or list of values obtained by applying afunction to margins of an array or matrix.


因此,它首先将您的输入对象转换为矩阵(数组),该矩阵必须具有相同的原子数据类型。这意味着您的数据被强制转换为 character , 因为 factor不是原子向量类型。
> as.matrix(X)
X1 X2
[1,] "1" "f1"
[2,] "2" "f2"
[3,] "3" "f3"
[4,] "4" "f4"

关于r - 为什么在 apply() 和 sapply() 中使用 is.factor() 返回不同的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63075709/

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