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(object at c>0)},
> replace=function(from,values){
> from at c <- values at b^3
> 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(object at c>0)},
replace=function(from,values){
from at c <- values at b^3
return(from)
},
coerce=function(from) {
new("B",b=from at c^(1/3))
}
)
> as(c,"B") <- b #ok (!)
>
> ### using setAs
> setAs("D","B",
> function(from,to){to<-new("B",b=from at d);return(to)},
> replace=function(from,values){
> from at d<-values at b^2;
> 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