如何找出data.frame的类

T. *_*ige 1 r class

我有一个简单的问题,这让我今天早上很奇怪.如何获得显示数据帧列类的向量?

当我计算这个时,我认为它应该有效,但事实并非如此.我对结果更加惊讶,并不理解结果.

这是我的例子:

Example = data.frame(
             Col1 = c(2,5,10), 
             Col2 = c("Hello", "I am a", "Factor"), 
             Col3 = c(T,F,T))
str(Example)
# 'data.frame': 3 obs. of  3 variables:
# $ Col1: num  2 5 10
# $ Col2: Factor w/ 3 levels "Factor","Hello",..: 2 3 1
# $ Col3: logi  TRUE FALSE TRUE
Run Code Online (Sandbox Code Playgroud)

所以我有一个数据框,其中包含一个数字列,一个因子列和一个逻辑列,并且class()apply函数中的命令结果为character.任何人都可以解释我为什么以及如何获得类的向量?

apply(Example, 2, class)
#       Col1        Col2        Col3 
# "character" "character" "character" 
Run Code Online (Sandbox Code Playgroud)

Spa*_*man 6

apply 不适合你,因为在文档中:

 If ‘X’ is not an array but an object of a class with a non-null
 ‘dim’ value (such as a data frame), ‘apply’ attempts to coerce it
 to an array via ‘as.matrix’ if it is two-dimensional (e.g., a data
 frame) or via ‘as.array’.
Run Code Online (Sandbox Code Playgroud)

所以你的数据框成为一个矩阵,列类设置为可以代表你的列的最简单的类 - 在这种情况下是一个字符矩阵:

> as.matrix(Example)
     Col1 Col2     Col3   
[1,] " 2" "Hello"  " TRUE"
[2,] " 5" "I am a" "FALSE"
[3,] "10" "Factor" " TRUE"
Run Code Online (Sandbox Code Playgroud)

使用 sapply

> sapply(Example,class)
     Col1      Col2      Col3 
"numeric"  "factor" "logical" 
Run Code Online (Sandbox Code Playgroud)