[Rd] order of operations
Andre@G||||bert @end|ng |rom chu-rouen@|r
Sat Aug 28 09:44:06 CEST 2021
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.
De : R-devel <r-devel-bounces using r-project.org> de la part de peter dalgaard <pdalgd using gmail.com>
Envoy� : samedi 28 ao�t 2021 09:26:03
� : Duncan Murdoch
Cc : r-devel using 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.
> On 27 Aug 2021, at 21:14 , Duncan Murdoch <murdoch.duncan using 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)
>>> ##  2
>>> ##  2
>> At least the "R Language Definition"  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 using r-project.org mailing list
Peter Dalgaard, Professor,
Center for Statistics, Copenhagen Business School
Solbjerg Plads 3, 2000 Frederiksberg, Denmark
Office: A 4.23
Email: pd.mes using cbs.dk Priv: PDalgd using gmail.com
R-devel using r-project.org mailing list
[[alternative HTML version deleted]]
More information about the R-devel