如何在R中获取对象的容器类型?

时间:2012-07-24 03:31:27

标签: r

假设我有一个名为v的对象,如何找到它的容器类型(向量,列表,矩阵等),而不尝试每个is.vector(v),is.list(v )......?

1 个答案:

答案 0 :(得分:7)

有三个功能对您有所帮助:modestrclass

首先,让我们制作一些数据:

nlist <- list(a=c(1,2,3), b=c("a", "b", "c"), c=matrix(rnorm(10),5))
ndata.frame <- data.frame(a=c("a", "b", "c"), b=1:3)
ncharvec <- c("a", "b", "c")
nnumvec <- c(1, 2, 3)
nintvec <- 1:3

因此,让我们使用上面提到的功能:

mode(nlist)
[1] "list"

str(nlist)
List of 3
 $ a: num [1:3] 1 2 3
 $ b: chr [1:3] "a" "b" "c"
 $ c: num [1:5, 1:2] -0.9469 -0.0602 -0.3601 0.9594 -0.4348 ...

class(nlist)
[1] "list"

现在为数据框:

mode(ndata.frame)
[1] "list"

这可能会让您大吃一惊,但数据框只是一个带有data.frame类属性的列表。

str(ndata.frame)
'data.frame':   3 obs. of  2 variables:
 $ a: Factor w/ 3 levels "a","b","c": 1 2 3
 $ b: int  1 2 3
class(ndata.frame)
[1] "data.frame"

请注意,矢量有不同的模式:

mode(ncharlist)
[1] "character"
mode(nnumvec)
[1] "numeric"
mode(nintvec)
[1] "numeric"

另请注意,虽然nnumvecnintvec看起来相同,但却完全不同:

str(nnumvec)
 num [1:3] 1 2 3
str(nintvec)
 int [1:3] 1 2 3

class(nnumvec)
[1] "numeric"
class(nintvec)
[1] "integer"

根据您想要的具体情况,确定您使用的功能。 str通常是查看变量的好函数,而其他两个函数在函数中更有用。