连续测试多个 %in% 是什么意思?
What does multiple %in% in a row test?
考虑:
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"。为什么不是这样?
您首先要做的是此操作: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))
考虑:
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"。为什么不是这样?
您首先要做的是此操作: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))