Megh Dal
2010-Jul-30 18:21 UTC
[R] Fw: Having problem to define a subclass, please help me
Dear all, apart from my previous question, I would also like to ask one more question here, which is as follows: #let me 1st define a class and a subclass setClass("a", representation=list(x="numeric", y="numeric"), prototype=list(x=rep(1,3),y=rep(2,3))) setClass("b", representation=list(x1="character", y1="character"), prototype=list(x1=rep("A",3),y1=rep("B",3)), contains="a") #Now I define the method for initialize() for class "a" setMethod("initialize", "a", function(.Object, x, y, ...) { if (length(x) != length(y)) x=y=rep(10,4) .Object at x = x .Object at y = y .Object }) new("a", x=rnorm(4), y=rnorm(4)) new("a", x=rnorm(4), y=rnorm(3)) #Next I define method for initialize() for subclass "b" setMethod("initialize", "b", function(.Object, x1, y1, ...) { if (length(x1) == length(y1)) x1=y1=rep("bbb",4) .Object at x1 = x1 .Object at y1 = y1 .Object })> new("b", x1=letters[1:3], x2=letters[2:4], x=rnorm(4), y=rnorm(3))An object of class "b" Slot "x1": [1] "bbb" "bbb" "bbb" "bbb" Slot "y1": [1] "bbb" "bbb" "bbb" "bbb" Slot "x": [1] 1 1 1 Slot "y": [1] 2 2 2> new("b", x1=letters[1:3], x2=letters[2:4], x=rnorm(4), y=rnorm(4))Error in checkSlotAssignment(object, name, value) : assignment of an object of class "numeric" is not valid for slot "y1" in an object of class "b"; is(value, "character") is not TRUE Here my questions are: 1. Why I am getting the prototype object in next to previous example for slots x & y? 2. Why just previous example generates some error? 3. The method initialize() function for a subclass requires explicit description of all slots of it's superclass? If yes why? In my understanding, all defined law for super-class should be inherited by it's sub-class, therefore no need to define again. I would be really grateful if someone clarify those. Thanks --- On Fri, 7/30/10, Megh Dal <megh700004 at yahoo.com> wrote:> From: Megh Dal <megh700004 at yahoo.com> > Subject: Having problem to define a subclass, please help me > To: r-help at stat.math.ethz.ch > Date: Friday, July 30, 2010, 4:46 PM > Here I am having problem to define a > subclass, specially if I define that subclass after defining > initialize() method for its superclass. Here is my code: > > > setClass("a", representation=list(x="numeric", > y="numeric"), prototype=list(x=rnorm(10), y=rnorm(10))) > [1] "a" > > setMethod("initialize", "a", function(.Object, x, y, > ...) { > +? ? ? ? ? ? ? ? > ? ? ? ? ? ? ? > ???if (length(x) != length(y)) x = y = rep(5, > 4) > +? ? ? ? ? ? ? ? > ? ? ? ? ? ? ? > ???.Object at x = x > +? ? ? ? ? ? ? ? > ? ? ? ? ? ? ? > ???.Object at y = y > +? ? ? ? ? ? ? ? > ? ? ? ? ? ? ? > ???.Object }) > [1] "initialize" > > setClass("b", representation=list(x1="character"), > contains="a") > Error in .local(.Object, ...) : element 1 is empty; > ???the part of the args list of 'length' > being evaluated was: > ???(x) > > > > Can anyone please point me where I am doing wrong? > > Thanks, > > > > ? ? ? >