[Rd] complex NA's match(), etc: not back-compatible change proposal
Martin Maechler
maechler at stat.math.ethz.ch
Mon Apr 3 13:05:41 CEST 2017
>>>>> Suharto Anggono Suharto Anggono via R-devel <r-devel at r-project.org>
>>>>> on Sat, 1 Apr 2017 14:10:06 +0000 writes:
> I am raising this again.
> With
> z <- complex(real = c(0,NaN,NaN), imaginary = c(NA,NA,0)) ,
> results of
> sapply(z, match, table = z)
> and
> match(z, z)
> are different in R 3.4.0 alpha. I think they should be the same.
> I suggest changing 'cequal' in unique.c such that a
> complex number that has both NA and NaN matches NA and
> doesn't match NaN, as such complex number is printed as NA.
Thank you very much, Suharto, for the reminder.
I have committed a change to R-devel yesterday, though
your suggestion above had not been 100% clear to me.
What I think we want and I decided to commit
r72473 | maechler | 2017-04-02 22:23:56 +0200 (Sun, 02 Apr 2017)
was to entirely mimic how R format()s and prints() complex numbers:
1) If a complex number has a real or imaginary which is NA then
it is formatted / printed as "NA"
==> All such complex numbers should match()
i.e. match(), unique(), duplicated() treat such complex
numbers as "the same".
2) The picture is very different with (non-NA) NaN:
There, R formats and prints NaN+1i or NaN+99i or 0+1i*NaN
differently, and [in R-devel only, planned in R 3.4.0 alpha
in a day or two!]
match(), unique(), duplicated() now treat them as different.
The change is more consistent notably does give the same result
for match(z,z)
and sapply(z, match, table = z)
for a variety of z (permutations).
More information about the R-devel
mailing list