为什么数据框中的列在子集化与应用时会发生变化 class?

Why do columns in data frames change class when subsetted versus apply?

我正在尝试向数据框中添加一个摘要行,详细说明每列的级别。我 运行 遇到跨框架应用色阶功能的问题。我认为原因是单独处理的列被视为因子向量,但是当使用 apply 函数时,它们被视为字符:

a = c("a","b","c")
b = c("d","e","f")
m = cbind(a,b)
df = as.data.frame(m)
class(df[,1])
[1] "factor"
apply(df, MARGIN=2, class)
          a           b 
"character" "character" 

我认为是问题的原因:

levels(df[,1])
[1] "a" "b" "c"
apply(df, MARGIN=2, levels)
NULL

我查看了有关应用、数据框和网络的帮助文档。有人可以解释这是为什么吗?

您可以使用 lapply 或 sapply 函数来了解您的 class 变量,据我了解,apply 明智地遍历列元素,因此每个元素都是一个字符,因此输出显示为字符,其中 as lapply 和 sapply 函数作用于变量,因此它给出 class 个变量,要么是字符,要么是因子

lapply(df,class)
$a
[1] "factor"

$b
[1] "factor"

sapply(df,class)
       a        b 
"factor" "factor"