[R] A %nin% operator?

David Winsemius dwinsemius at comcast.net
Thu Aug 5 17:53:48 CEST 2010


The examples in the help page for "%in%" (shared by "match") has the  
definition of a "%w/o%" binary operator.

"%w/o%" <- function(x,y) x[!x %in% y] #-- x without y
since:
  "%in%" <- function(x, table) match(x, table, nomatch = 0) > 0
It appears that you have just re-invented the without-wheel. (which  
also seems to be happening a lot in Formula 1 races lately.)
-- 
David.
On Aug 5, 2010, at 11:19 AM, Ken Williams wrote:

> Sometimes I write code like this:
>
>> qf.a <- subset(qf, pubid %in% c(104, 106, 107, 108))
>> qf.b <- subset(qf, !pubid %in% c(104, 106, 107, 108))
>
> and I get a little worried that maybe I've remembered the precedence  
> rules
> wrong, so I change it to
>
>> qf.a <- subset(qf, pubid %in% c(104, 106, 107, 108))
>> qf.b <- subset(qf, !(pubid %in% c(104, 106, 107, 108)))
>
> and pretty soon my code looks like fingernail clippings (or Lisp)  
> and I'm
> thinking about precedence rather than my original task.  So I write  
> a %nin%
> operator which I define as:
>
>> `%nin%` <- function (x, table) match(x, table, nomatch = 0L) == 0L
>
> and then I'm happy again.
>
> I wonder, would something like this find a home in core R?  Or is  
> that too
> much syntactic sugar for your taste?
>
> -- 
> Ken Williams


David Winsemius, MD
West Hartford, CT



More information about the R-help mailing list