我有一个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
循环的情况下构造这样的函数吗?提前谢谢你!
从它的声音来看,您正在寻找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
,因此您的条件"因此可以转换为逻辑向量"与您实际要求的不太匹配:-)