[Rd] table(exclude = NULL) always includes NA
Martin Maechler
maechler at stat.math.ethz.ch
Mon Aug 15 12:35:41 CEST 2016
>>>>> Martin Maechler <maechler at stat.math.ethz.ch>
>>>>> on Mon, 15 Aug 2016 11:07:43 +0200 writes:
>>>>> Suharto Anggono Suharto Anggono <suharto_anggono at yahoo.com>
>>>>> on Sun, 14 Aug 2016 03:42:08 +0000 writes:
>> useNA <- if (missing(useNA) && !missing(exclude) && !(NA %in% exclude)) "ifany"
>> An example where it change 'table' result for non-factor input, from https://stat.ethz.ch/pipermail/r-help/2005-April/069053.html :
>> x <- c(1,2,3,3,NA)
>> table(as.integer(x), exclude=NaN)
>> I bring the example up, in case that the change in result is not intended.
> Thanks a lot, Suharto.
> To me, the example is convincing that the change (I commited
> Friday), svn rev 71087 & 71088, are a clear improvement:
> (As you surely know, but not all the other readers:)
> Before the change, the above example gave *different* results
> for 'x' and 'as.integer(x)', the integer case *not* counting the NAs,
> whereas with the change in effect, they are the same:
>> x <- as.integer(dx <- c(1,2,3,3,NA))
>> table(x, exclude=NaN); table(dx, exclude=NaN)
> x
> 1 2 3 <NA>
> 1 1 2 1
> dx
> 1 2 3 <NA>
> 1 1 2 1
>>
> --
> But the change has affected 6-8 (of the 8000+) CRAN packages
> which I am investigating now and probably will be in contact with the
> package maintainers after that.
There has been another bug in table(), since the time 'useNA'
was introduced, which gives (in released R, R-patched, or R-devel):
> table(1:3, exclude = 1, useNA = "ifany")
2 3 <NA>
1 1 1
>
and that bug now (in R-devel, after my changes) triggers in
cases it did not previously, notably in
table(1:3, exclude = 1)
which now does set 'useNA = "ifany"' and so gives the same silly
result as the one above.
The reason for this bug is that addNA(..) is called (in all R
versions mentioned) in this case, but it should not.
I'm currently testing yet another amendment..
Martin
More information about the R-devel
mailing list