OK, I see. Thanks.
-Dan

On Tue, Jul 13, 2010 at 9:11 AM, John Chambers <j...@r-project.org> wrote:

>
> On 7/13/10 8:43 AM, Daniel Murphy wrote:
>
>> 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 obj...@.data construct.
>>
>
> No, that's not the distinction.  Preferred for what, is the question. In
> order for a class to extend a basic type, it has to have that type. Then the
> .Data "slot" is a sort of fiction needed for the metadata.
> (Because of some "features" of R implementation, it's not quite that
> simple.  Matrices act like a basic type, and some types, such as
> "environment" require a second kludge.)
>
>
> If you really want that slot, the advice holds, but only because there is
> no actual ".Data" slot (i.e., attribute).
>
> But you weren't talking about that at all.  In fact (just to contradict my
> previous mail) you probably wanted to turn your object into a data.frame.
>  If so, best to say so:
>
> > as(z, "data.frame")
>
> Object of class "data.frame"
>  x
> 1 1
> 2 2
> 3 3
>
> and, for that matter:
>
> > as(z, "list")
> [[1]]
> [1] 1 2 3
>
>  -Dan
>> On Tue, Jul 13, 2010 at 5:57 AM, John Chambers <j...@r-project.org
>> <mailto:j...@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@r-project.org <mailto:R-devel@r-project.org> mailing list
>>
>>        https://stat.ethz.ch/mailman/listinfo/r-devel
>>
>>
>>

        [[alternative HTML version deleted]]

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

Reply via email to