[Rd] table on numeric vector with exclude argument containing value missing from vector causes warning + "NaN" levels incorrectly removed from factors

Karl Ove Hufthammer karl at huftis.org
Fri Jan 21 11:30:58 CET 2011


I *think* the following may be considered a bug or two, but would appreciate 
any comments before (not) filing an official bug report.

Possible bug 1: ‘table’ on numeric vector with ‘exclude’ argument containing 
value missing from vector causes warning
Possible bug 2: ‘table’ incorrectly tries to remove "NaN" levels

The help page for ‘table’ says the the first argument is ‘one or more 
objects which can be interpreted as factors (including character strings) 
[…]’. Does this include numeric vectors? Numeric vectors seems to work fine. 
Example:

  x = sample(1:3, 100, replace=TRUE)
  table(x)

The ‘exclude’ argument explicitly mentions factor levels, but seems to work 
fine for other objects too. Example:

  table(x, exclude=2)

It’s actually not clear from the help page what is meant by ‘levels to 
remove from all factors in ...’, but it seems like a character vector is 
expected. And indeed the following also works:

  table(x, exclude="2")

However, setting the ‘exclude’ argument to a value not contained in 
the vector to be tabulated,

  table(x, exclude="foo")

causes the following warning:

  In as.vector(exclude, typeof(x)) : NAs introduced by coercion’:

The correct results is produced, though. Note that all of the following does 
*not* cause any warning:

  table(x, exclude=NA)
  table(x, exclude=NaN)
  table(factor(x), exclude="foo")
  table(as.character(x), exclude="foo")

I also wonder about the inclusion of ‘NaN’ in the definition of ‘table’:

table(..., exclude = if (useNA == "no") c(NA, NaN), useNA = c("no", 
    "ifany", "always"), dnn = list.names(...), deparse.level = 1) 

A factor can’t include a NaN level, as the levels values are always
strings or NA. And having the above definition causes "NaN" (string)
levels to mysteriously disappear when run through ‘table’. Example:

  table(factor(c("NA",NA,"NcN","NbN", "NaN")))

Result:

   NA NbN NcN 
    1   1   1

(The missing NA is not a bug; it’s caused by useNA="no".)



sessionInfo()
R version 2.12.1 Patched (2011-01-20 r54056)
Platform: i686-pc-linux-gnu (32-bit)

locale:
[1] C

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base   

-- 
Karl Ove Hufthammer



More information about the R-devel mailing list