Dear all, `?Syntax` documents that `?` has the lowest precedence, right under `=`. Indeed it reads: *The following unary and binary operators are defined. They are listed in precedence groups, from highest to lowest. * and ends the list with *<- <<-* *assignment (right to left)* *=* *assignment (right to left)* *?* *help (unary and binary)* I believe it to be wrong, `=` has lower precedence than `?`. See the following example : `?` <- `+` x = 2 ? 3 x #> [1] 5 We see that `2 ? 3` is evaluated first, then the result is assigned to x, showing higher precedence for `?`. Compare it to the similar code using `<-` : x <- 2 ? 3 #> [1] 5 x #> [1] 2 Here first `x <- 2` is evaluated, then its output is added to 3, and the result `5` is printed. and we verify that `x` is still `2`. Showing lower precedence for `?` consistent with the doc. Hadley Wickham's package `lobstr` makes it easy to compare the parse trees: lobstr::ast({x = 2 ? 3}) #> o-`{` #> \-o-`=` #> +-x #> \-o-`?` #> +-2 #> \-3 lobstr::ast({x <- 2 ? 3}) #> o-`{` #> \-o-`?` #> +-o-`<-` #> | +-x #> | \-2 #> \-3 Best regards, Antoine [[alternative HTML version deleted]]
> From: R-devel [mailto:r-devel-bounces at r-project.org] On Behalf Of Ant F > Sent: 29 August 2019 12:06 > To: r-devel at r-project.org > Subject: [Rd] ?Syntax wrong about `?`'s precedence ? > ... > See the following example : > > `?` <- `+`I'm curious; What did you expect to happen if you replace the function '?' with the operator '+' ? ? is surely now being evaluated as a user-defined function and not as an operator. Would you expect the results of doing that to be the same as evaluation without replacement? S Ellison ******************************************************************* This email and any attachments are confidential. Any use...{{dropped:8}}
Precedence is a property of the parser and has nothing to do with the semantics assigned to various symbols. Using just core R functions you can see the precedence of '?' is between those of '=' and '<-'.> # '=' has lower precedence than '?' > str(as.list(parse(text="a ? b = c")[[1]]))List of 3 $ : symbol $ : language `?`(a, b) $ : symbol c> str(as.list(parse(text="a = b ? c")[[1]]))List of 3 $ : symbol $ : symbol a $ : language `?`(b, c)> # '<-' has higher precedence than '?' > str(as.list(parse(text="a ? b <- c")[[1]]))List of 3 $ : symbol ? $ : symbol a $ : language b <- c> str(as.list(parse(text="a <- b ? c")[[1]]))List of 3 $ : symbol ? $ : language a <- b $ : symbol c Bill Dunlap TIBCO Software wdunlap tibco.com On Fri, Aug 30, 2019 at 4:41 AM Stephen Ellison <S.Ellison at lgcgroup.com> wrote:> > From: R-devel [mailto:r-devel-bounces at r-project.org] On Behalf Of Ant F > > Sent: 29 August 2019 12:06 > > To: r-devel at r-project.org > > Subject: [Rd] ?Syntax wrong about `?`'s precedence ? > > ... > > See the following example : > > > > `?` <- `+` > > I'm curious; What did you expect to happen if you replace the function '?' > with the operator '+' ? > ? is surely now being evaluated as a user-defined function and not as an > operator. > Would you expect the results of doing that to be the same as evaluation > without replacement? > > S Ellison > > > > > ******************************************************************* > This email and any attachments are confidential. Any u...{{dropped:10}}