如何测试对象是否为向量

时间:2013-10-21 17:40:37

标签: r object vector

如何测试对象是否为向量,即模式logicalnumericcomplexcharacteris.vector的问题在于它还为列表和其他类型返回TRUE

> is.vector(list())
[1] TRUE

我想知道它是否是原始类型的向量。是否有本地方法,或者我必须通过存储模式?

3 个答案:

答案 0 :(得分:27)

只有原始函数,所以我假设你想知道向量是否是原子类型之一。如果您想知道对象是否是原子对象,请使用is.atomic

is.atomic(logical())
is.atomic(integer())
is.atomic(numeric())
is.atomic(complex())
is.atomic(character())
is.atomic(raw())
is.atomic(NULL)
is.atomic(list())        # is.vector==TRUE
is.atomic(expression())  # is.vector==TRUE
is.atomic(pairlist())    # potential "gotcha": pairlist() returns NULL
is.atomic(pairlist(1))   # is.vector==FALSE

如果你只对你提到的原子类型的子集感兴趣,最好明确地测试它们:

mode(foo) %in% c("logical","numeric","complex","character")

答案 1 :(得分:5)

也许不是最优的,但它会完成工作:检查变量是否为向量,如果它不是列表。然后,您将绕过is.vector结果:

if(is.vector(someVector) & !is.list(someVector)) { 
  do something with the vector 
}

答案 2 :(得分:0)

使用mode的替代方法是使用class

class(foo) %in% c("character", "complex", "integer", "logical", "numeric")

这将防止匹配列表以及因子和矩阵。请注意整数的显式列表,因为它作为一个类与数字不匹配。如果需要更频繁地使用它,只需将其包装在一个小函数中即可。