Skip to content

S4 : defining [<- using inheritance from 2 classes

3 messages · Martin Morgan, Christophe Genolini

#
Hi the list,

I define a class 'C' that inherit from two classes 'A' and 'B'. 'A' and 'B'
have no slot with similar names.
----------------
setClass(
    Class="C",
    contains=c("A","B")
)


To define the get operator '[' for class "C", I simply use the get of "A" or
"B" (the constante 'SLOT_OF_A' is a character holding the names of all the
slot of A) :
----------------
setMethod("[","C",
  function(x,i,j,drop){
     if(i%in%SLOT_OF_A){
        x <- as(x,'A')
     }else{
        x <- as(x,'B')
     }
     return(x[i,j])
}
----------------

Is it possible to do something similar for the set operator '[<-' ?

Thanks
Christophe 

--
View this message in context: http://r.789695.n4.nabble.com/S4-defining-using-inheritance-from-2-classes-tp4082217p4082217.html
Sent from the R help mailing list archive at Nabble.com.
#
On 11/17/2011 09:46 PM, cgenolin wrote:
Hi Christophe,

can you provide a working example? The above seems highly unusual; 
normally one expects class(x[i, j]) = class(x). Best guess at what 
you're wrote above is

setMethod("[", c("C", "character", "numeric"),
     function(x, i, j, ..., drop=TRUE) # conform to getGeneric("[")
{
     if (!i %in% slotNames(x))
         stop("cannot subset with '", i, "'")
     slot(x, i) = slot(x, i)[j]
     x
})

which still seems quite unusual.

Hope that helps,

Martin

  
    
2 days later
#
My working example is in the package kml3d. The class 'clusterLongData' is
define by inehirance from class 'listClustering' and 'longitudinalData'. But
as you say, it is unusual, I will try an other way.

Thank you for your help.

Christophe

--
View this message in context: http://r.789695.n4.nabble.com/S4-defining-using-inheritance-from-2-classes-tp4082217p4091498.html
Sent from the R help mailing list archive at Nabble.com.