R 中 %in% 的否定

Negation of %in% in R

R 中是否有 %in% 的简短否定,例如 !%in%%!in%


当然我可以用!(c("A", "B") %in% c("B", "C"))否定c("A", "B") %in% c("B", "C")(参见this question),但我更喜欢更直接的方法并省去一对括号(大概大多数人都这样)更喜欢 c("A", "B") != c("B", "C") 而不是 !(c("A", "B") == c("B", "C"))).

实际上你不需要额外的括号,!c("A", "B") %in% c("B", "C") 有效。

如果您喜欢更易读的内容,请自行定义:

"%nin%" <- function(x, table) match(x, table, nomatch = 0L) == 0L

这样做的好处是不浪费精力 -- 我们不会得到结果然后取反,我们直接得到结果。 (差异通常应该是微不足道的)

您随时可以创建一个:

> `%out%` <- function(a,b) ! a %in% b

> 1:10 %out% 5:15
[1]  TRUE  TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE

另外还有一个与setdiff有点相似的函数,returnsa唯一个元素不在b:

> setdiff(1:10,5:15)
[1] 1 2 3 4
> setdiff(5:15,1:10)
[1] 11 12 13 14 15

不,没有内置函数可以执行此操作,但您可以使用

轻松自己编写代码
`%nin%` = Negate(`%in%`)

`%!in%` = Negate(`%in%`)

查看此主题和后续讨论:%in% operator - NOT IN (alternatively here)


此外,有人指出包 Hmisc 包含运算符 %nin%,因此如果您将它用于您的应用程序,它已经存在。

library(Hmisc)
"A" %nin% "B"
#[1] TRUE
"A" %nin% "A"
#FALSE

%!in% 功能现已在 library(operators)

中可用