On Mar 16, 2008, at 8:12 PM, Christophe Genolini wrote: > Hi the list > > I am fighting with the twins setAs and setIs... > > Here are some questions and comments (comments to myself but that > migth > be wrong, it is why I am posting them) > 1. Very surprising : using setIs define 'is', 'as<-' but not 'as' ??? > 2. Using setAs define 'as', 'as<-' but not 'is'... > What surprise me is that as<- can be define by both. I would have > thing > that setis is for 'is', setAs is for 'as' and 'as<-'... > Since it is not the case, is there a possibility to set with only one > function 'as', 'is' and 'as<-' > > Last point, I get a warning using setAs. I did not manage to find the > name of the variable it want me to use... > > ### Data > setClass("B",representation(b="numeric")) > setClass("C",representation(c="numeric")) > setClass("D",representation(d="numeric")) > b <- new("B",b=3) > c <- new("C",c=4) > d <- new("D",d=5) > > ### using setIs > setIs("C","B", > test=function(object){return([EMAIL PROTECTED]>0)}, > replace=function(from,values){ > [EMAIL PROTECTED] <- [EMAIL PROTECTED] > return(from) > } > ) > is(c,"B") #Ok > as(c,"B") #not ok
It seems to me your problem here is simply that you did not define a coerce cal in setIs, so it does not know how to turn a C object into a B object, which is what you ask it to do here. It knows how to test if C object is also a B object, because of the test function you provided, and it can do the replacement you ask it in as(c,"B") <-b because of the replace command you provided, but the third part is missing. Perhaps something like this: setIs("C","B", test=function(object){return([EMAIL PROTECTED]>0)}, replace=function(from,values){ [EMAIL PROTECTED] <- [EMAIL PROTECTED] return(from) }, coerce=function(from) { new("B",[EMAIL PROTECTED](1/3)) } ) > as(c,"B") <- b #ok (!) > > ### using setAs > setAs("D","B", > function(from,to){to<-new("B",[EMAIL PROTECTED]);return(to)}, > replace=function(from,values){ > [EMAIL PROTECTED]<[EMAIL PROTECTED]; > return(from) > } > ) > is(d,"B") # not ok > as(d,"B") # ok > as(d,"B")<-b # ok > > > Thanks > > Christophe Haris Skiadas Department of Mathematics and Computer Science Hanover College ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.