[R] Class & Method, S3 / S4
Martin Morgan
mtmorgan at fhcrc.org
Thu Mar 2 14:23:17 CET 2006
Again, R has a different paradigm from what you're used to. R is a
'pass by value' language. So 'obj' inside the method is a *copy* of
testObj, and your assignment changes the 'value' slot of the copy. An
R way of doing this might be
setMethod("test", signature=c("connect"),
function( obj ) {
obj at value <- obj at value / 2
## and other manipulations...
obj
})
testObj <- test( testObj )
I 'know' these things by reading Chambers' Programming with Data, and
by looking at exsiting code (ok, and maybe some other ways, too
;). There are some example packages suggested in this thread
https://stat.ethz.ch/pipermail/r-devel/2005-November/035370.html
If you have an R source distribution, look in, for instance,
<PATH-TO-R-SRC>/src/library/stats4/R
At the R command prompt, do something like
library(stats4)
library(help=stats4)
?"update-methods"
getMethods("update")
A warning, I guess, is that looking at complicated code (and the help
pages for the methods package) can be confusing without the kind of
foundation that Chambers' book provides. Maybe others on the list will
provide some hints for introductory documentation on S4 classes and
methods.
Hope that's enough to get you going!
Martin
"Dominik Locher" <dominik.locher at bondsearch.ch> writes:
> Hi Martin
>
> Thanks a lot for your short example. If you input
>
> test(testObj)
>
> it will return
>
> 22
>
> However, how is it possible that the value will be saved in the object
>
> i.e. (does not work currently!!??)
> setMethod("test", signature=c("connect"),
> function( obj ) { obj at value<-obj at value / 2 })
>
> so that test(testObj) will save a new value to obj at value or
>
> testObj at value will return 22.
>
> Thanks.
> Nik
>
> ______________________________________________
> R-help at stat.math.ethz.ch mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
More information about the R-help
mailing list