[R] Operator proposal: %between%

Duncan Murdoch murdoch.duncan at gmail.com
Thu Sep 4 17:01:48 CEST 2014

On 04/09/2014 10:41 AM, Torbjørn Lindahl wrote:
> Not sure if this is the proper list to propose changes like this, if it
> passes constructive criticism, it would like to have a %between% operator
> in the R language.

But it appears that you do:
> I currently have this in my local R startup script:
> `%between%` <- function(x,...) {
>    y <- range( unlist(c(...)) )
>    return( x >= y[1] & x =< y[2] )
> }
> It allows me to do things like: 5 %between c(1,10)
> and also as act as an "in_range" operator:
> foo %between% a.long.list.with.many.values

So what you are asking is that someone should make this available to 
others, as well.  That seems like a reasonable thing to do, but why 
shouldn't that someone be you?
> This may seem unnecessary, since 5 >= foo[1] && foo<= foo[2] is also quite
> short to type, but there is a mental cost to this, eg if you are deeply
> focused on a complicated program flow, the %between% construct is a lot
> easier to type out, and relate to, than the logically more complex
> construct with && and <=/>=, at least in my experience.
One problem with your definition is that it's not clear it does the 
right thing when x is a vector.  I might have a vector of lower bounds, 
and a vector of upper bounds, and want to check each element of x 
against the corresponding bound, i.e. compute

  lower <= x & x <= upper

Your %between% operator could be rewritten so that x %between% 
cbind(lower, upper) would give this result, but it doesn't do so now.   
(I'm not saying you *should* rewrite it like that, but it's something 
you should consider.)

Duncan Murdoch

More information about the R-help mailing list