I found this part in the documentation of 'factor'.

     'factor(x, exclude=NULL)' applied to a factor is a no-operation
     unless there are unused levels: in that case, a factor with the
     reduced level set is returned.  If 'exclude' is used it should
     also be a factor with the same level set as 'x' or a set of codes
     for the levels to be excluded.


Regarding the last sentence, this is the actual behavior.

> x <- factor(c("a","b"), levels=c("a","b"))
> x
[1] a b
Levels: a b
> factor(x, exclude=factor("a", levels=c("a","b")))
[1] a b
Levels: a b
> factor(x, exclude=1L)
[1] a b
Levels: a b

I expect "a" to be removed from levels.


> sessionInfo()
R version 2.15.2 (2012-10-26)
Platform: i386-w64-mingw32/i386 (32-bit)

locale:
[1] LC_COLLATE=English_United States.1252
[2] LC_CTYPE=English_United States.1252
[3] LC_MONETARY=English_United States.1252
[4] LC_NUMERIC=C
[5] LC_TIME=English_United States.1252

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

loaded via a namespace (and not attached):
[1] tools_2.15.2


The results are the same in R 2.5.1.


In R 2.5.1, if function 'match' did not apply 'as.character' to factor (and 
used internal code of factor instead), it would work to set 'exclude' as in the 
above quotation of the documentation. In the example above, "a" would be 
removed from levels.


One cause of the trouble is this code in the definition of function 'factor', 
in R 2.15.2 or in R 2.5.1.

    exclude <- as.vector(exclude, typeof(x))

What is the intent actually?

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to