From maechler at stat.math.ethz.ch  Mon Aug 15 12:35:41 2016
From: maechler at stat.math.ethz.ch (Martin Maechler)
Date: Mon, 15 Aug 2016 12:35:41 +0200
Subject: [Rd] table(exclude = NULL) always includes NA
In-Reply-To: <22449.34399.349376.938875@stat.math.ethz.ch>
References: <540967018.14196661.1471146128783.JavaMail.yahoo.ref@mail.yahoo.com>
	<540967018.14196661.1471146128783.JavaMail.yahoo@mail.yahoo.com>
	<22449.34399.349376.938875@stat.math.ethz.ch>
Message-ID: <22449.39677.11989.207005@stat.math.ethz.ch>

>>>>> 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



[Rd] table(exclude = NULL) always includes NA
Martin Maechler