r - 为什么 apply() 不适用于 R 中的数据框?

标签 r apply

我有一个名为“成人”的数据框

> str(adult[, 1:2)
'data.frame':   32561 obs. of  15 variables:
 $ age      : int  39 50 38 53 28 37 49 52 31 42 ...
 $ worktp   : Factor w/ 9 levels " ?"," Federal-gov",..: 8 7 5 5 5 5 5 7 5 5 ...

> is.factor(adult[,1])
[1] FALSE

> is.factor(adult[,2])
[1] TRUE

一切正常,直到我使用
> apply(adult[,1:2], 2, function(x) is.factor(x))
age worktp 
FALSE  FALSE 

为什么我在 worktp 上得到了 FALSE,其中 is.factor() 只是给了我 TRUE?我真的需要这个 apply() 函数来处理我的数据框。我应该使用其他一些与应用相关的功能吗?

谢谢!

最佳答案

apply将在处理之前将您的数据转换为矩阵(请参阅 ?apply 中的详细信息部分)。在此步骤中,因子信息丢失。

d <- data.frame(num=1:4, fac=factor(1:4))
d[, 2]
[1] 1 2 3 4
Levels: 1 2 3 4        # levels, hence a factor

m <- as.matrix(d)
m[, 2]
[1] "1" "2" "3" "4"     # no levels anymore

apply(d, 2, is.factor)

  num   fac 
FALSE FALSE             # no factors as converted to matrix

要得到你想要的,你可以使用 lapply
lapply(d, is.factor)
$num
[1] FALSE

$fac
[1] TRUE

sapply
sapply(d, is.factor)
  num   fac 
FALSE  TRUE 

关于r - 为什么 apply() 不适用于 R 中的数据框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21109460/

相关文章:

r - 根据 DATE 间隔和 data.table R 中的其他变量有条件地改变新列

r - 在包检查 R 2.14.0 期间使用带有小插图的 inst/extdata

r - 通过R中的相同函数修改数据集的多列

javascript - 如何使用带有可选参数命名的Apply调用函数?

r - 计算 R 矩阵中每列特定整数的数量

r - Shinydashboard 动态 TabPanel

html - 如何防止 splitLayout、Shiny、R 中两个输入标签重叠?

r - 将函数应用于相同大小的连续子向量

python - Pandas 将具有不同参数值的函数应用于不同的列

r - 计算 shapefile 中的多边形