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}}
See also: https://bugs.r-project.org/bugzilla/show_bug.cgi?id=16710 On Fri, Aug 30, 2019 at 9:02 AM William Dunlap via R-devel <r-devel at r-project.org> wrote:> > 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}} > > ______________________________________________ > R-devel at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel
...and 14955, which seems to have the explanation (but was marked as closed/fixed??). The parser does list '?' as lower precedence than '=', but '='-assignments are not normal 'expr's which can appear as arguments to '?'. (Presumably because of named arguments: f(a=b) differs from f(a<-b).) Other tokens which have lower precedence than assignments are flow-control items, IF ELSE WHILE FOR REPEAT, but I don't see any way to confuse them in the same way as '?'. It might be possible to resolve the situation by specifying '?' syntax explicitly as expr_or_assign '?' expr_or_assign, but, well, "There be Tygers here"... -pd> On 30 Aug 2019, at 18:32 , Kevin Ushey <kevinushey at gmail.com> wrote: > > See also: https://bugs.r-project.org/bugzilla/show_bug.cgi?id=16710 > > On Fri, Aug 30, 2019 at 9:02 AM William Dunlap via R-devel > <r-devel at r-project.org> wrote: >> >> 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}} >> >> ______________________________________________ >> R-devel at r-project.org mailing list >> https://stat.ethz.ch/mailman/listinfo/r-devel > > ______________________________________________ > R-devel at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel-- Peter Dalgaard, Professor, Center for Statistics, Copenhagen Business School Solbjerg Plads 3, 2000 Frederiksberg, Denmark Phone: (+45)38153501 Office: A 4.23 Email: pd.mes at cbs.dk Priv: PDalgd at gmail.com
> From: William Dunlap [mailto:wdunlap at tibco.com] > Precedence is a property of the parser and has nothing to do with the > semantics assigned to various symbols.Yes, but output depends on evaluation as well as precedence. Seeing different things wasn't an immediate surprise. Your own parse() examples are much clearer; thanks for that. S ******************************************************************* This email and any attachments are confidential. Any use, copying or disclosure other than by the intended recipient is unauthorised. If you have received this message in error, please notify the sender immediately via +44(0)20 8943 7000 or notify postmaster at lgcgroup.com and delete this message and any copies from your computer and network. LGC Limited. Registered in England 2991879. Registered office: Queens Road, Teddington, Middlesex, TW11 0LY, UK