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:
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:
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