Dear all, Since my package is based on S4 classes, I would like to know how to add a slot to an existing S4 class without breaking the code of users of my package. Assume the following S4 class: setClass("MyClass", representation(name = "character", type = "character", data = "data.frame" ), prototype(name = "", type = "Default", data = data.frame(matrix(nr=0,nc=0)) ) )#MyClass Assume that a user has created an object: > myclass <- new("MyClass", name="MyName", type="MyType", data=tmp) > str(myclass) Now I would like to add another slot "info" to MyClass: setClass("MyClass", representation(name = "character", type = "character", data = "data.frame", info = "data.frame" ), prototype(name = "", type = "Default", data = data.frame(matrix(nr=0,nc=0)), info = data.frame(matrix(nr=0,nc=0)) ) )#MyClass Now when the user loads my package with S4 class MyClass containing a new slot and calls: > str(myclass) Error in FUN(c("name", "type", "data", "info")[[4L]], ...) : no slot of name "info" for this object of class "MyClass" > My question is: Is there any possibility or special trick, which would avoid this error message? Are there other possibilities to access an additional data.frame from an existing class? Is there something like an "evolution" of S4 classes, which distinguishes the different implementations of an S4 class, and allows the user to keep the object of an old class? Best regards Christian _._._._._._._._._._._._._._._._._._ C.h.r.i.s.t.i.a.n S.t.r.a.t.o.w.a V.i.e.n.n.a A.u.s.t.r.i.a e.m.a.i.l: cstrato at aon.at _._._._._._._._._._._._._._._._._._
Wolfgang Huber
2008-Dec-29 22:53 UTC
[Rd] How to add a slot to S4 class of an existing package?
Dear Christian this post from Martin Morgan on class versioning in Bioconductor's Biobase package might be relevant: https://stat.ethz.ch/pipermail/bioc-devel/2006-May/000545.html and also section 6 of this: http://www.bioconductor.org/packages/2.4/bioc/vignettes/Biobase/inst/doc/BiobaseDevelopment.pdf Best wishes Wolfgang ---------------------------------------------------- Wolfgang Huber EMBL-EBI http://www.ebi.ac.uk/huber cstrato wrote:> Dear all, > > Since my package is based on S4 classes, I would like to know how to add > a slot to an existing S4 class without breaking the code of users of my > package. > > Assume the following S4 class: > setClass("MyClass", > representation(name = "character", > type = "character", > data = "data.frame" > ), > prototype(name = "", > type = "Default", > data = data.frame(matrix(nr=0,nc=0)) > ) > )#MyClass > > Assume that a user has created an object: > > myclass <- new("MyClass", name="MyName", type="MyType", data=tmp) > > str(myclass) > > > Now I would like to add another slot "info" to MyClass: > setClass("MyClass", > representation(name = "character", > type = "character", > data = "data.frame", > info = "data.frame" > ), > prototype(name = "", > type = "Default", > data = data.frame(matrix(nr=0,nc=0)), > info = data.frame(matrix(nr=0,nc=0)) > ) > )#MyClass > > Now when the user loads my package with S4 class MyClass containing a > new slot and calls: > > str(myclass) > Error in FUN(c("name", "type", "data", "info")[[4L]], ...) : > no slot of name "info" for this object of class "MyClass" > > > > My question is: > Is there any possibility or special trick, which would avoid this error > message? > > Are there other possibilities to access an additional data.frame from an > existing class? > > Is there something like an "evolution" of S4 classes, which > distinguishes the different implementations of an S4 class, and allows > the user to keep the object of an old class? > > Best regards > Christian > _._._._._._._._._._._._._._._._._._ > C.h.r.i.s.t.i.a.n S.t.r.a.t.o.w.a > V.i.e.n.n.a A.u.s.t.r.i.a > e.m.a.i.l: cstrato at aon.at > _._._._._._._._._._._._._._._._._._ > > ______________________________________________ > R-devel at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel
Reasonably Related Threads
- Replacing slot of S4 class in method of S4 class?
- Unexpected side effect of the ":::" operator on the value of isGeneric
- Problem using ofstream in C++ class in package for MacOS X
- setMethod "[" - extract by names within Slot
- Seeking help to define method for show() for an S4 object