我有一个R列表,其中包含不同长度的数字向量。这样的事情。
l = list(a = c(0, 1, 2), b = c(0, 1), c = c(0, 1, NA), d = c(0, 1, 5))
我想识别具有0
,1
或NA
值的向量,因此可以将其转换为逻辑向量。在上面的示例中,我将识别向量b
和c
。
要做到这一点,我将尝试这样的事情。
is.logical.vector = lapply(l, FUNCTION_NAME)
但是我不确定使用什么函数代替FUNCTION_NAME
(这只是一个占位符以用于说明目的)。我需要一些可以使用allowed = c(0, 1, NA)
之类的向量的内容,并确保只有allowed
中的值在向量的元素中表示(如列表l
中的那些)。
你知道这样的功能是否存在吗?或者,你知道如何在没有显式for
循环的情况下构建这样的函数吗?提前谢谢!
答案 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
,因此您的条件“因此可以转换为逻辑向量”不会相当匹配你实际上似乎要求的东西: - )