...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 <kevinus...@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@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.elli...@lgcgroup.com> >> wrote: >> >>>> From: R-devel [mailto:r-devel-boun...@r-project.org] On Behalf Of Ant F >>>> Sent: 29 August 2019 12:06 >>>> To: r-devel@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@r-project.org mailing list >> https://stat.ethz.ch/mailman/listinfo/r-devel > > ______________________________________________ > R-devel@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....@cbs.dk Priv: pda...@gmail.com ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel