Yes, and were it not for 0 * NA == NA, you might skip evaluation of y if x evaluates to zero. In Andre Gillibert's example:
1 | (alpha<-6) there really is no reason to evaluate the assignment since (1 | any) is always TRUE. Notwithstanding method dispatch, that is. With general function calls, all bets are off. Even f(x <- 1) might decide not to evaluate its argument. - pd > On 27 Aug 2021, at 21:14 , Duncan Murdoch <murdoch.dun...@gmail.com> wrote: > > On 27/08/2021 3:06 p.m., Enrico Schumann wrote: >> On Fri, 27 Aug 2021, Gabor Grothendieck writes: >>> Are there any guarantees of whether x will equal 1 or 2 after this is run? >>> >>> (x <- 1) * (x <- 2) >>> ## [1] 2 >>> x >>> ## [1] 2 >> At least the "R Language Definition" [1] says >> "The exponentiation operator ‘^’ and the left >> assignment plus minus operators ‘<- - = <<-’ >> group right to left, all other operators group >> left to right. That is [...] 1 - 1 - 1 is -1" >> which would imply 2. > > I think this is a different issue. There's only one operator in question > (the "*"). The question is whether x*y evaluates x first or y first (and I > believe the answer is that there are no guarantees). I'm fairly sure both are > guaranteed to be evaluated, under the rules for group generics listed in > ?groupGeneric, but I'm not certain the guarantee is honoured in all cases. > > Duncan Murdoch > > ______________________________________________ > 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