[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