[Rd] understanding virtual classes and extensions thereof
Martin Morgan
mtmorgan at fhcrc.org
Sun Oct 22 00:23:27 CEST 2006
John Chambers <jmc at r-project.org> writes:
> As for:
>
> setClass("kid4", contains = "mom")
>
> this is currently a meaningless class: It's not virtual but it has no
> meaningful prototype. My preference would be a change that makes this a
> virtual class, as the programmer probably intended (maybe with a warning
> for now since it's technically a change in the API).
Maybe I misunderstand the statement about making these constructs
virtual, but I want to use 'empty' classes as predicates for method
dispatch etc. I want to be able to continue to do this:
setClass("Kid")
setClass("GoodKid", contains="Kid")
setClass("BadKid", contains="Kid")
setGeneric("deserts",
function(object, ...) standardGeneric("deserts"))
setMethod("deserts",
signature(object="GoodKid"),
function(object, ...) "learn chess with dad!")
setMethod("deserts",
signature(object="BadKid"),
function(object, ...) "straight to bed")
I had been silently hoping that VIRTUAL would *not* be the default, so
that in the above example I could instantiate a niether good nor bad
Kid without some artifice.
Martin
> Parlamis Franklin wrote:
>> I am having some trouble creating a hierarchy of virtual classes
>> (akin to the class structure in the 'Matrix' package). I think they
>> arise from my not understanding the best way to specify virtual
>> subclasses of a virtual class. please see questions below code.
>>
>> setClass("mom")
>>
>> setClass("kid1", representation("mom", "VIRTUAL"))
>> setClass("kid2", representation("VIRTUAL"), contains = "mom")
>> setClass("kid3"); setIs("kid3", "mom")
>>
>> (i) Are 'kid1' and 'kid2' equivalent? I.e., is there any difference
>> between including a superclass as an unnamed argument in the
>> 'representation' call and including it in the 'contains' argument?
>> If not, why does the 'contains' argument exist?
>>
>> (ii) What is the difference between 'kid1' and 'kid2', on the one
>> hand, and 'kid3', on the other hand? I see that 'kid1' and 'kid2'
>> have prototypes of class 'S4', while 'kid3' has a prototype of class
>> "NULL". But I don't really understand the implications of that. I
>> am using virtual classes mostly to economize on method writing. Will
>> it matter on any level whether my virtual classes have NULL or S4
>> prototypes?
>>
>> On a related note, the behavior exhibited below also seems infelicitous
>>
>> setClass("kid4", contains = "mom")
>> new("kid4") # error in the show method
>>
>> franklin parlamis
>>
>> ______________________________________________
>> R-devel at r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-devel
>>
>>
>
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
--
Martin T. Morgan
Bioconductor / Computational Biology
http://bioconductor.org
More information about the R-devel
mailing list