[R] Class & Method, S3 / S4

Prof Brian Ripley ripley at stats.ox.ac.uk
Thu Mar 2 15:26:39 CET 2006


You could also define a replacement function and methods for it, when

test(testObj) <- 22

would change testObj itself.  This is done via setReplaceMethod, but you 
will need to look at Chambers (1998) to understand that, as 
?setReplaceMethod leads to a page that does not describe it apart from 
the call sequence (nor is it in the index of the book, but see pp 340-2).


On Thu, 2 Mar 2006, Martin Morgan wrote:

> 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
>
> ______________________________________________
> 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
>

-- 
Brian D. Ripley,                  ripley at stats.ox.ac.uk
Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
University of Oxford,             Tel:  +44 1865 272861 (self)
1 South Parks Road,                     +44 1865 272866 (PA)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595




More information about the R-help mailing list