Checking whether an item is in a vector or not in a vector is a common task. The notation in R is a little inelegant when expressing the “not in” condition since the negation operator (!
) is separated from the comparison operator (%in%
):
5 %in% c(1, 2, 3, 4, 5) Â # TRUE !5 %in% c(1, 2, 3, 4, 5) # FALSE
R is a language where you can easily extend the set of built in operators:
`%!in%` <- function(needle, haystack) { !(needle %in% haystack) }
Now, I can express my intentions reasonably clearly with my new, compact, infix operator %!in%
:
5 %in% c(1, 2, 3, 4, 5) Â # TRUE 5 %!in% c(1, 2, 3, 4, 5) # FALSE
Moral: bend your tools to your will, not the other way ’round.