检查向量中的元素是否仅从另一个向量绘制

时间:2014-01-16 17:06:04

标签: r list vector iteration

我有一个R列表,其中包含不同长度的数字向量。这样的事情。

l = list(a = c(0, 1, 2), b = c(0, 1), c = c(0, 1, NA), d = c(0, 1, 5))

我想识别具有01NA值的向量,因此可以将其转换为逻辑向量。在上面的示例中,我将识别向量bc

要做到这一点,我将尝试这样的事情。

is.logical.vector = lapply(l, FUNCTION_NAME)

但是我不确定使用什么函数代替FUNCTION_NAME(这只是一个占位符以用于说明目的)。我需要一些可以使用allowed = c(0, 1, NA)之类的向量的内容,并确保只有allowed中的值在向量的元素中表示(如列表l中的那些)。

你知道这样的功能是否存在吗?或者,你知道如何在没有显式for循环的情况下构建这样的函数吗?提前谢谢!

1 个答案:

答案 0 :(得分:3)

根据它的声音,您正在寻找all%in%的组合:

vapply(l, function(z) all(z %in% c(0, 1, NA)), logical(1L))
#     a     b     c     d 
# FALSE  TRUE  TRUE FALSE 

或者,您可以使用lapply

lapply(l, function(z) all(z %in% c(0, 1, NA)))

仅供参考,as.logical(5)甚至as.logical(-5)也评估为TRUE,因此您的条件“因此可以转换为逻辑向量”不会相当匹配你实际上似乎要求的东西: - )