'Negation of %in% in R [duplicate]
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"))).
Solution 1:[1]
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 2:[2]
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 3:[3]
The %!in% function is now available in the library(operators)
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | |
| Solution 2 | |
| Solution 3 |
