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