Re: [Rd] factor S4 class is NA when as.character method exists

From: peter dalgaard <pdalgd_at_gmail.com>
Date: Mon, 23 Jan 2012 17:25:21 +0100

On Jan 23, 2012, at 16:07 , Dan Murphy wrote:

> Hello,
>
> '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)
>> factor(bar)

> [1] 12
> Levels: 12
>> setMethod("as.character", "foo", function(x) paste("x=", x@.Data))

> [1] "as.character"
>> as.character(bar)

> [1] "x= 12"
>> factor(bar)

> [1] <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:

> unique(bar)

[1] 12

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
> https://stat.ethz.ch/mailman/listinfo/r-devel

-- 
Peter Dalgaard, Professor
Center for Statistics, Copenhagen Business School
Solbjerg Plads 3, 2000 Frederiksberg, Denmark
Phone: (+45)38153501
Email: pd.mes_at_cbs.dk  Priv: PDalgd_at_gmail.com

______________________________________________
R-devel_at_r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel
Received on Mon 23 Jan 2012 - 16:27:55 GMT

This quarter's messages: by month, or sorted: [ by date ] [ by thread ] [ by subject ] [ by author ]

All messages

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.2.0, at Tue 24 Jan 2012 - 08:40:11 GMT.

Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-devel. Please read the posting guide before posting to the list.

list of date sections of archive