【问题标题】:Why is.factor() used in apply() and sapply() returns different values? [duplicate]为什么在 apply() 和 sapply() 中使用 is.factor() 返回不同的值? [复制]
【发布时间】:2020-11-14 10:42:04
【问题描述】:

我的目标是获取一个布尔值向量来指示 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.

class()is.numeric() 等其他函数也发生了同样的情况。

【问题讨论】:

  • applyX 更改为矩阵。建议不要将apply 用于数据帧。
  • 查看apply(X, 2, function(x) x)的输出

标签: r apply sapply


【解决方案1】:

来自apply的参考:

返回通过应用 数组或矩阵的边距函数。

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

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

【讨论】:

    猜你喜欢
    • 2013-10-10
    • 2015-07-07
    • 1970-01-01
    • 2022-01-01
    • 2017-07-16
    • 1970-01-01
    • 1970-01-01
    • 2014-02-10
    • 2019-01-17
    相关资源
    最近更新 更多