This is all very intriguing. Normally when piping into an operator
function, R throws "Error: function '+' not supported in RHS call of a
pipe":

> 1 |> `+`(2)
Error: function '+' not supported in RHS call of a pipe

This is a different error from the above "invalid use of pipe placeholder",
which makes me think it was added for a different purpose than prohibiting
operator precedence issues. I am interested in the justification of this
error.

However, as you have noted, when using the placeholder, R has no issue with
this syntax (which I didn't realise!):

> 1 |> `+`(x=_, 2)
[1] 3


On Sat, Apr 22, 2023 at 3:00 AM Duncan Murdoch <murdoch.dun...@gmail.com>
wrote:

> On 21/04/2023 12:16 p.m., Michael Milton wrote:
> > I'm afraid I don't understand. I know that parsing `+`(1, 1) returns a
> > result equivalent to `1 + 1`, but why does that impose a restriction on
> > parsing the pipe operator? What is the downside of allowing arbitrary
> > RHS functions?
>
> I thought the decision to exclude "_ + 1" happens after enough parsing
> has happened so that the code making the decision can't tell the
> difference between "_ + 1" and "`+`(_, 1)".  I might be wrong about
> that, but this suggests it:
>
>    > quote(_ + 1)
>    Error in quote("_" + 1) : invalid use of pipe placeholder (<input>:1:0)
>    > quote(`+`(_,  1))
>    Error in quote("_" + 1) : invalid use of pipe placeholder (<input>:1:0)
>
> On the other hand, this works:
>
>    > quote(x |> `+`(e1 = _, 1))
>    x + 1
>
> So maybe `+`() is fine after all.
>
> Duncan Murdoch
>
>

        [[alternative HTML version deleted]]

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to