r-在一行测试中执行多个%in%的操作



考虑:

a <- c("a", "b", "c")
b <- c("a", "e", "f")
c <- c("a", "h", "i")
> a %in% b %in% c
[1] FALSE FALSE FALSE

由于每个向量中的第一个元素是"a",我本以为这会计算为TRUE FALSE FALSE。为什么不是这样?

您要做的是首先执行此操作:a %in% b导致TRUE FALSE FALSE。然后你基本上做链c(TRUE,FALSE,FALSE) %in% c,当然,这会产生所有的False

你可以尝试这个来获得布尔值的所需向量(考虑位置):

a == Reduce(function(u,v) ifelse(u==v, u, F), list(a,b,c))
#[1]  TRUE FALSE FALSE

如果你想要通用元素,不取决于位置,你可以做:

Reduce(intersect, list(a,b,c))

最新更新