Re: [Rd] S4 class extends "data.frame", getDataPart sees "list"

From: Daniel Murphy <chiefmurphy_at_gmail.com>
Date: Tue, 13 Jul 2010 08:43:06 -0700

Thank you. For "getDataPart" I was following (my interpretation of) advice from the documentation for "Classes": The functions getDataPart<http://127.0.0.1:15455/library/methods/help/getDataPart>  and setDataPart <http://127.0.0.1:15455/library/methods/help/setDataPart> are a cleaner, but essentially equivalent way to deal with the data part. I interpreted "cleaner" to mean "preferred." From your reply, John, it sounds like I should go back to the object@.Data construct. -Dan
On Tue, Jul 13, 2010 at 5:57 AM, John Chambers <jmc_at_r-project.org> wrote:

> On 7/11/10 9:08 PM, Daniel Murphy wrote:
>
>> R-Devel:
>>
>> When I get the data part of an S4 class that contains="data.frame", it
>> gives
>> me a list, even when the "data.frame" is the S4 version:

>>
>> d<-data.frame(x=1:3)
>>> isS4(d)

>>>
>> [1] FALSE # of course
>>
>>> dS4<-new("data.frame",d)
>>> isS4(dS4)

>>>
>> [1] TRUE # ok
>>
>>> class(dS4)
>>>
>> [1] "data.frame" # good
>> attr(,"package")
>> [1] "methods"

>>
>>> setClass("A", representation(label="character"), contains="data.frame")
>>>
>> [1] "A"
>>
>>> a<-new("A",dS4, label="myFrame")
>>> getDataPart(a)
>>>
>> [[1]] # oh?
>> [1] 1 2 3
>>
>> class(a@.Data)
>>>
>> [1] "list" # hmm
>>
>>> names(a)
>>>
>> [1] "x" # sure, that makes sense
>>
>>> a
>>>
>> Object of class "A"
>> x
>> 1 1
>> 2 2
>> 3 3
>> Slot "label":
>> [1] "myFrame"

>>
>>
>> Was I wrong to have expected the "data part" of 'a' to be a "data.frame"?
>>
>
> Yes. Also, there is a clue in the documentation for getDataPart: "rarely
> suitable to be called directly"
> The data part, aka "data slot", generally does not have a class (S4 or S3).
>
> You are probably looking for S3Part():
>
> > setClass("myFrame", contains = "data.frame")
> [1] "myFrame"
> > z = new("myFrame", data.frame(x=1:3))
> > z
> Object of class "myFrame"

>
> x
> 1 1
> 2 2
> 3 3
> > S3Part(z)
> Object of class "data.frame"

>
> x
> 1 1
> 2 2
> 3 3
> > S3Part(z, strictS3 = TRUE)

>
> x
> 1 1
> 2 2
> 3 3
>
>
>
>
>> Thanks.
>>
>> Dan Murphy
>>
>> [[alternative HTML version deleted]]
>>
>> ______________________________________________
>> R-devel_at_r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-devel
>>
>>

        [[alternative HTML version deleted]]



R-devel_at_r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel Received on Tue 13 Jul 2010 - 15:46:19 GMT

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 13 Jul 2010 - 18:50:14 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