在R中是否有类似于!%in%
或%!in%
的简短否定形式来否定%in%
?
当然,我可以通过!(c("A", "B") %in% c("B", "C"))
(参见这个问题)来否定c("A", "B") %in% c("B", "C")
,但我更喜欢一种更直接的方法并且省略一对括号(就像大多数人可能更喜欢c("A", "B") != c("B", "C")
而不是!(c("A", "B") == c("B", "C"))
)。
在R中是否有类似于!%in%
或%!in%
的简短否定形式来否定%in%
?
当然,我可以通过!(c("A", "B") %in% c("B", "C"))
(参见这个问题)来否定c("A", "B") %in% c("B", "C")
,但我更喜欢一种更直接的方法并且省略一对括号(就像大多数人可能更喜欢c("A", "B") != c("B", "C")
而不是!(c("A", "B") == c("B", "C"))
)。
不,没有内置的函数可以做到这一点,但您可以轻松地使用代码自己编写实现。
`%nin%` = Negate(`%in%`)
或者
`%!in%` = Negate(`%in%`)
请参阅此讨论和跟进讨论:%in%运算符 - NOT IN(或者这里)
此外,还指出包Hmisc
包含了操作符%nin%
,所以如果您在应用程序中使用它,它已经存在。
library(Hmisc)
"A" %nin% "B"
#[1] TRUE
"A" %nin% "A"
#FALSE
!
。 - MichaelChirico您可以随时创建一个:
> `%out%` <- function(a,b) ! a %in% b
> 1:10 %out% 5:15
[1] TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE
否则,可以使用 setdiff
函数,它返回在 b
中不存在的 a
的 唯一元素:
否则,可以使用setdiff
函数,它返回a
中不在b
中出现的唯一元素:
> setdiff(1:10,5:15)
[1] 1 2 3 4
> setdiff(5:15,1:10)
[1] 11 12 13 14 15
setdiff
而不是否定的%in%
时,你(或者说OP)应该小心,因为正如其名称所示,它是一个“集合”操作,因此仅返回“a”中不在“b”中的“唯一”元素。这可能与否定的%in%
产生非常不同的结果。 - talat!c("A", "B") %in% c("B", "C")
就可以工作。"%nin%" <- function(x, table) match(x, table, nomatch = 0L) == 0L
现在可以在 library(operators)
中使用 %!in%
函数。