[R] Operator proposal: %between%

William Dunlap wdunlap at tibco.com
Fri Sep 5 16:14:08 CEST 2014


You can easily run into precedence problems with the %fun% syntax.  E.g., if
   1 %<% 5 %<% 10
returns TRUE then
    1 %<% 5 %<% 10*2
will return 2 because %<% has higher precedence than *.
     > as.list(quote(1 %<% 5 %<% 10*2))
     [[1]]
     `*`

    [[2]]
    1 %<% 5 %<% 10

    [[3]]
    [1] 2

Standard functional syntax makes this unambiguous and allows you to
use named arguments to make their meanings unambiguous.
   isBetween(5, lower=1, upper=10)
or
   isBetween(5, range=c(1,10))


Bill Dunlap
TIBCO Software
wdunlap tibco.com


On Thu, Sep 4, 2014 at 12:54 PM, Greg Snow <538280 at gmail.com> wrote:
> The TeachingDemos package has %<% and %<=% operators for a between
> style comparison.  So for your example you could write:
>
> 1 %<% 5 %<% 10
>
> or
>
> 1 %<=% 5 %<=% 10
>
> And these operators already work with vectors:
>
> lb %<=% x %<% ub
>
> and can even be further chained:
>
> 0 %<% x %<% y %<% z %<% 1  # only points where x < y and y < z and all
> between 0 and 1.
>
> It is a little bit different syntax from yours, but would that do what you want?
>
> If not, we could add a %between% function (expand it a bit following
> Duncan's suggestion) to the TeachingDemos package if you don't want to
> create your own package.
>
> On Thu, Sep 4, 2014 at 8:41 AM, Torbjørn Lindahl
> <torbjorn.lindahl at gmail.com> 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.
>>
>> 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
>>
>> 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.
>>
>> --
>> mvh
>> Torbjørn Lindahl
>>
>>         [[alternative HTML version deleted]]
>>
>> ______________________________________________
>> R-help at r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-help
>> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
>> and provide commented, minimal, self-contained, reproducible code.
>
>
>
> --
> Gregory (Greg) L. Snow Ph.D.
> 538280 at gmail.com
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.



More information about the R-help mailing list