Negation of %in% in R [duplicate]

独自空忆成欢 提交于 2019-11-29 05:31:44

No, there isn't a built in function to do that, but you could easily code it yourself with

`%nin%` = Negate(`%in%`)

Or

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

See this thread and followup discussion: %in% operator - NOT IN


Also, it was pointed out the package Hmisc includes the operator %nin%, so if you're using it for your applications it's already there.

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

You can always create one:

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

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

Otherwise there is a somewhat similar function with setdiff, which returns the unique elements of a that are not in b:

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

Actually you don't need the extra parentheses, !c("A", "B") %in% c("B", "C") works.

If you prefer something that reads easier, just define it yourself:

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

This has the advantage of not wasting effort -- we don't get a result and then negate it, we just get the result directly. (the difference should generally be trivial)

The %!in% function is now available in the library(operators)

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!