[R] Is there a way to update a method on an existing Reference Class object?

Martin Morgan mtmorgan at fhcrc.org
Thu Jan 5 00:18:39 CET 2012


On 01/04/2012 06:09 AM, Peder Bacher wrote:
> Hi
>
> Being able to do object oriented programming in R is really good. I
> now started using the Reference Classes and really like it.
>
> Though, I have one problem: I cannot find a way to update a method on
> an existing object.
>
> The flexibility that scripting gives (really needed for interactive
> data analysis) is lost if everything have to be recalculated all the
> time.
>
> For example I would normally work something like this:
>
> cl1<- setRefClass("cl1",
>    fields=list(x="data.frame"),
>    methods=list(
>      init=function(){"Read and process data"},
>      fitModel=function(){"Fit different kind of models and keep the
> results in x and other fields"},
>      plotFit1=function(){"Plot the fit one way"},
>      plotFit2=function(){"Plot the fit in another way way"})
> )
>
> I would then initialize it and run the functions on it:
> cl1Object<- cl1$new()
> ...
>
> The problem then comes if I need to change something in one of the
> methods, because I then have to run all the initialization and fitting
> again, since the change is done to "cl1" and not "cl1Object", of
> course.
>
> The reference class documentation states that it is not possible since
> this would give problems with inheritance etc. Is there a workaround
> to this?

I wouldn't say that this is recommended, but as a workaround the default 
'initialize' method works as a copy constructor so

   cl1 <- setRefClass("cl1",
     fields=list(x="data.frame"),
     methods=list(
       plotFit1=function(){"Plot the fit one way"})
   )

   cl1Object <- cl1$new(x=data.frame(y=1:2))

   cl1_a <- setRefClass("cl1",
     fields=list(x="data.frame"),
     methods=list(
       plotFit1=function(){"Plot the fit one way"},
       plotFit2=function(){"Plot the fit in another way way"})
   )

and then

   > cl1_aObject <- cl1_a$new(cl1Object)
   > cl1_aObject$x
     y
   1 1
   2 2
   > cl1_aObject$plotFit2
   Class method definition for method plotFit2()
   function ()
   {
       "Plot the fit in another way way"
   }
   <environment: 0x19974e0>

Martin
>
> The very best
> Peder
>
> ______________________________________________
> R-help at 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.


-- 
Computational Biology
Fred Hutchinson Cancer Research Center
1100 Fairview Ave. N. PO Box 19024 Seattle, WA 98109

Location: M1-B861
Telephone: 206 667-2793



More information about the R-help mailing list