Negation of %in% in R

RMatchNegation

R Problem Overview


Is there a short negation of %in% in R like !%in% or %!in%?


Of course I can negate c("A", "B") %in% c("B", "C") by !(c("A", "B") %in% c("B", "C")) (cf. this question) but I would prefere a more straight forward approach and save a pair of brackets (alike presumably most people would prefer c("A", "B") != c("B", "C") over !(c("A", "B") == c("B", "C"))).

R Solutions


Solution 1 - R

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 (alternatively here)


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

Solution 2 - R

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

Solution 3 - R

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)

Solution 4 - R

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

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionQaswedView Question on Stackoverflow
Solution 1 - Rcatastrophic-failureView Answer on Stackoverflow
Solution 2 - RplannapusView Answer on Stackoverflow
Solution 3 - RMichaelChiricoView Answer on Stackoverflow
Solution 4 - RReindert Van HerrewegheView Answer on Stackoverflow