[Rd] factor S4 class is NA when as.character method exists
pdalgd at gmail.com
Mon Jan 23 17:25:21 CET 2012
On Jan 23, 2012, at 16:07 , Dan Murphy wrote:
> 'factor' returns <NA> for my S4 object when the class is given an
> "as.character" method. Here is a minimal example:
>> setClass("foo", contains="numeric")
>> bar <- new("foo", 12)
>  12
> Levels: 12
>> setMethod("as.character", "foo", function(x) paste("x=", x at .Data))
>  "as.character"
>  "x= 12"
>  <NA>
> Levels: 12
> I would like to 'aggregate' by my S4 objects, but 'factor' seems to be
> getting in the way. Is there an 'as.character' implementation that works
> better for S4 classes? I searched help.search("factor S4 class") and
> help.search("factor S4 as.character") without success.
Single-stepping the factor call would have shown you that the real problem is that you don't have a unique() method for your class:
i.e., you are getting the default numeric method, which returns a numeric vector, so the levels become as.character(unique(bar)) which is c("12") and doesn't match any of the values of as.character(bar).
So, either provide a unique() method, or use factor(as.character(bar)).
> Thank you.
> Dan Murphy
> [[alternative HTML version deleted]]
> R-devel at r-project.org mailing list
Peter Dalgaard, Professor
Center for Statistics, Copenhagen Business School
Solbjerg Plads 3, 2000 Frederiksberg, Denmark
Email: pd.mes at cbs.dk Priv: PDalgd at gmail.com
More information about the R-devel