为什么在apply()中使用.factor(),而sapply()返回不同的值?

为什么在apply()中使用.factor(),而sapply()返回不同的值?,r,apply,sapply,R,Apply,Sapply,我的目标是得到一个布尔值向量,以指示data.frame中的每一列是否是一个因子,我在sapply()和apply()函数中使用了is.factor(),它们似乎返回了不同的值,而apply()返回了错误的值。有人能告诉我是什么原因造成了这种差异吗 X <- data.frame(X1=c(1,2,3,4), ## numeric X2=factor(paste0("f",c(1:4))) ## factor) sapply(X, is

我的目标是得到一个布尔值向量,以指示data.frame中的每一列是否是一个因子,我在
sapply()
apply()
函数中使用了
is.factor()
,它们似乎返回了不同的值,而
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.

X参考
apply

返回通过应用 函数设置为数组或矩阵的边距

因此,它首先将输入对象转换为必须具有相同原子数据类型的矩阵(数组)。这意味着数据被强制为
字符
,因为
因子
不是原子向量类型

> as.matrix(X)
     X1  X2  
[1,] "1" "f1"
[2,] "2" "f2"
[3,] "3" "f3"
[4,] "4" "f4"

apply
X
更改为矩阵。建议不要对数据帧使用
apply
。查看
apply(X,2,函数(X)X)