3

考虑:

a <- c("a", "b", "c")
b <- c("a", "e", "f")
c <- c("a", "h", "i")

> a %in% b %in% c
[1] FALSE FALSE FALSE

我本来希望这会评估为TRUE FALSE FALSE,因为每个向量中的第一个元素是“a”。为什么不是这样?

4

1 回答 1

5

你正在做的是首先这个操作:a %in% b导致TRUE FALSE FALSE. 然后你基本上做链c(TRUE,FALSE,FALSE) %in% c,这当然会导致 all 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))
于 2015-06-30T09:26:22.797 回答