【发布时间】:2014-02-05 17:44:39
【问题描述】:
我有一个 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 循环的情况下构造这样的函数吗?提前谢谢!
【问题讨论】:
-
@AnandaMahto,这是真的(不是双关语)。但我想识别值为 0、1 或 NA 的向量,以转换为逻辑向量。我对其他值的向量不感兴趣。
-
类似
vapply(l, function(z) all(z %in% c(0, 1, NA)), logical(1L))? (或lapply(l, function(z) all(z %in% c(0, 1, NA)))。)根据您的评论,您还应该从结果中排除“a”。 -
@AnandaMahto,你成功了!您介意将您的答案作为正式答案而不是评论,以便我可以接受吗?顺便说一句,我发现
T而不是logical(1L)可以节省字符数,但效果也一样。 -
"我会识别向量 a、b 和 c。" c 中有一个 2,您要允许它还是只包含 只有 0、1 或 NA 的向量?
-
@user3114046,好收获!已适当编辑问题。