From gmbecker at ucdavis.edu  Thu Mar 16 17:01:13 2017
From: gmbecker at ucdavis.edu (Gabriel Becker)
Date: Thu, 16 Mar 2017 09:01:13 -0700
Subject: [Rd] Support for user defined unary functions
In-Reply-To: <CAD6tx95VZKQ00ESU9aqq_CBy7BNtX2_ANeaPryw+3W1RVL4vww@mail.gmail.com>
References: <CAD6tx95VZKQ00ESU9aqq_CBy7BNtX2_ANeaPryw+3W1RVL4vww@mail.gmail.com>
Message-ID: <CADwqtCMSrO-tZktHESg0LcVqP8qAKVbAnktAZGATKug2WYb-dQ@mail.gmail.com>

Jim,

This seems cool. Thanks for proposing it. To be concrete, he user-defined
unary operations would be of the same precedence (or just slightly below?)
built-in unary ones? So

"100" %identical% %chr% 100

would work and return TRUE under your patch?

And  with %num% <- as.numeric, then

1 + - %num% "5"

would also be legal (though quite ugly imo) and work?

Best,
~G

On Thu, Mar 16, 2017 at 7:24 AM, Jim Hester <james.f.hester at gmail.com>
wrote:

> R has long supported user defined binary (infix) functions, defined
> with `%fun%`. A one line change [1] to R's grammar allows users to
> define unary (prefix) functions in the same manner.
>
>     `%chr%` <- function(x) as.character(x)
>     `%identical%` <- function(x, y) identical(x, y)
>
>     %chr% 100
>     #> [1] "100"
>
>     %chr% 100 %identical% "100"
>     #> [1] TRUE
>
> This seems a natural extension of the existing functionality and
> requires only a minor change to the grammar. If this change seems
> acceptable I am happy to provide a complete patch with suitable tests
> and documentation.
>
> [1]:
> Index: src/main/gram.y
> ===================================================================
> --- src/main/gram.y     (revision 72358)
> +++ src/main/gram.y     (working copy)
> @@ -357,6 +357,7 @@
>         |       '+' expr %prec UMINUS           { $$ = xxunary($1,$2);
>  setId( $$, @$); }
>         |       '!' expr %prec UNOT             { $$ = xxunary($1,$2);
>  setId( $$, @$); }
>         |       '~' expr %prec TILDE            { $$ = xxunary($1,$2);
>  setId( $$, @$); }
> +       |       SPECIAL expr                    { $$ = xxunary($1,$2);
>  setId( $$, @$); }
>         |       '?' expr                        { $$ = xxunary($1,$2);
>  setId( $$, @$); }
>
>         |       expr ':'  expr                  { $$ =
> xxbinary($2,$1,$3);      setId( $$, @$); }
>
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
>



-- 
Gabriel Becker, PhD
Associate Scientist (Bioinformatics)
Genentech Research

	[[alternative HTML version deleted]]



[Rd] Support for user defined unary functions
Gabriel Becker