On 28/08/2021 3:44 a.m., GILLIBERT, Andre wrote:
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.
No, it can't, because until it evaluates the assignment it doesn't know
if it has a class that does strange things with *:
> `*.foo` <- function(x, y) 42
> NA*(alpha <- structure("bar", class="foo"))
[1] 42
I do not think that, on the short term, R would do that thing, but who
knows in the future!
As I posted yesterday, this is documented behaviour, so one would hope
for clear notice if it is going to change.
Duncan Murdoch
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
<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
<https://stat.ethz.ch/mailman/listinfo/r-devel>
______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel