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-boun...@r-project.org> de la part de peter dalgaard 
<pda...@gmail.com>
Envoy� : samedi 28 ao�t 2021 09:26:03
� : Duncan Murdoch
Cc : r-devel@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.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


        [[alternative HTML version deleted]]

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to