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

标签 r apply sapply

我的目标是获取一个 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 a function to margins of an array or matrix.

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

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

相关文章:

r - 比较每个组内变量的每个元素

r - D-高效平衡设计与R

r - R中的曲线拟合

r - 找到 r 中值最低的列

r - 在 R 中为多个因子列创建频率表

R dplyr : Find a specific value in a column, 然后用该值替换右侧后续列中的相邻单元格

r - 连接错误 stockPortfolio::getReturns

r - 从列表中提取 ARIMA 对象并将其存储在 R 的数据框中

r - 将 pnorm 应用于数据框的列

r - 如何在多列之间进行偏相关分析并通过多个协变量进行控制?