[Rd] binary form of is() contradicts its unary form
Suzen, Mehmet
mehmet.suzen at gmail.com
Wed Nov 29 21:21:44 CET 2017
Hi Herve,
Interesting observation with `setClass` but it is for S4. It looks
like `data.frame()` is not an S4 class.
> isS4(data.frame())
[1] FALSE
And in your case this might help:
> is(asS4(data.frame()), "list")
[1] TRUE
Looks like `is` is designed for S4 classes, I am not entirely sure.
Best,
-Mehmet
On 29 November 2017 at 20:46, Hervé Pagès <hpages at fredhutch.org> wrote:
> Hi Mehmet,
>
> On 11/29/2017 11:22 AM, Suzen, Mehmet wrote:
>>
>> Hi Herve,
>>
>> I think you are confusing subclasses and classes. There is no
>> contradiction. `is` documentation
>> is very clear:
>>
>> `With one argument, returns all the super-classes of this object's class.`
>
>
> Yes that's indeed very clear. So if "list" is a super-class
> of "data.frame" (as reported by is(data.frame())), then
> is(data.frame(), "list") should be TRUE.
>
> With S4 classes:
>
> setClass("A")
> setClass("B", contains="A")
>
> ## Get all the super-classes of B.
> is(new("B"))
> # [1] "B" "A"
>
> ## Does a B object inherit from A?
> is(new("B"), "A")
> # [1] TRUE
>
> Cheers,
> H.
>
>>
>> Note that object class is always `data.frame` here, check:
>>
>> > class(data.frame())
>> [1] "data.frame"
>> > is(data.frame(), "data.frame")
>> [1] TRUE
>>
>> Best,
>> Mehmet
>>
>>
>>
>>
>>
>> On 29 Nov 2017 19:13, "Hervé Pagès" <hpages at fredhutch.org
>> <mailto:hpages at fredhutch.org>> wrote:
>>
>> Hi,
>>
>> The unary forms of is() and extends() report that data.frame
>> extends list, oldClass, and vector:
>>
>> > is(data.frame())
>> [1] "data.frame" "list" "oldClass" "vector"
>>
>> > extends("data.frame")
>> [1] "data.frame" "list" "oldClass" "vector"
>>
>> However, the binary form of is() disagrees:
>>
>> > is(data.frame(), "list")
>> [1] FALSE
>> > is(data.frame(), "oldClass")
>> [1] FALSE
>> > is(data.frame(), "vector")
>> [1] FALSE
>>
>> while the binary form of extends() agrees:
>>
>> > extends("data.frame", "list")
>> [1] TRUE
>> > extends("data.frame", "oldClass")
>> [1] TRUE
>> > extends("data.frame", "vector")
>> [1] TRUE
>>
>> Who is right?
>>
>> Shouldn't 'is(object, class2)' be equivalent
>> to 'class2 %in% is(object)'? Furthermore, is there
>> any reason why 'is(object, class2)' is not implemented
>> as 'class2 %in% is(object)'?
>>
>> Thanks,
>> H.
>>
>> --
>> Hervé Pagès
>>
>> Program in Computational Biology
>> Division of Public Health Sciences
>> Fred Hutchinson Canc
>>
>> <https://urldefense.proofpoint.com/v2/url?u=https-3A__maps.google.com_-3Fq-3DFred-2BHutchinson-2BCanc-26entry-3Dgmail-26source-3Dg&d=DwMFaQ&c=eRAMFD45gAfqt84VtBcfhQ&r=BK7q3XeAvimeWdGbWY_wJYbW0WYiZvSXAJJKaaPhzWA&m=AptypGUf1qnpkFcOc1eU_vdGSHsush3RGVUyjk7yDu8&s=sTr3VPPxYCZLOtlBS3DToP4-Wi44EOLs99gJcV932b0&e=>er
>> Research Center
>> 1100 Fairview Ave. N, M1-B514
>> P.O. Box 19024
>> Seattle, WA 98109-1024
>>
>> E-mail: hpages at fredhutch.org <mailto:hpages at fredhutch.org>
>> Phone: (206) 667-5791
>> Fax: (206) 667-1319
>>
>> ______________________________________________
>> R-devel at r-project.org <mailto:R-devel at r-project.org> mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-devel
>>
>> <https://urldefense.proofpoint.com/v2/url?u=https-3A__stat.ethz.ch_mailman_listinfo_r-2Ddevel&d=DwMFaQ&c=eRAMFD45gAfqt84VtBcfhQ&r=BK7q3XeAvimeWdGbWY_wJYbW0WYiZvSXAJJKaaPhzWA&m=AptypGUf1qnpkFcOc1eU_vdGSHsush3RGVUyjk7yDu8&s=OzNPwqjAWVsXOGKMCmd4Fa7Udcm21ewfJmUN78LenQY&e=>
>>
>
> --
> Hervé Pagès
>
> Program in Computational Biology
> Division of Public Health Sciences
> Fred Hutchinson Cancer Research Center
> 1100 Fairview Ave. N, M1-B514
> P.O. Box 19024
> Seattle, WA 98109-1024
>
> E-mail: hpages at fredhutch.org
> Phone: (206) 667-5791
> Fax: (206) 667-1319
More information about the R-devel
mailing list