For the discussion:
> Yes, and were it not for 0 * NA == NA, you might skip evaluation of y if x
evaluates to zero.
With the same idea, NA * (alpha <- 6) could skip the assignment.
I do not think that, on the short term, R would do that thing, but who knows in
the future!
As of R 4.1, typeof(`*`) actually returns "builtin" rather than
"special", meaning that all its arguments are evaluated.
--
Sincerely
Andre GILLIBERT
________________________________
De : R-devel <r-devel-bounces at r-project.org> de la part de peter
dalgaard <pdalgd at gmail.com>
Envoy? : samedi 28 ao?t 2021 09:26:03
? : Duncan Murdoch
Cc : r-devel at r-project.org
Objet : Re: [Rd] order of operations
ATTENTION: Cet e-mail provient d?une adresse mail ext?rieure au CHU de Rouen. Ne
cliquez pas sur les liens ou n'ouvrez pas les pi?ces jointes ? moins de
conna?tre l'exp?diteur et de savoir que le contenu est s?r. En cas de doute,
transf?rer le mail ? ? DSI, S?curit? ? pour analyse. Merci de votre vigilance
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.duncan at
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 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
______________________________________________
R-devel at r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel
[[alternative HTML version deleted]]