Hello,
On Feb 13, 2014, at 2:16 PM, Ross Boylan <ross at biostat.ucsf.edu> wrote:
> Redefining methods of a refClass does not change the methods for existing
instances. I found this somewhat surprising, and also pretty inconvenient for
debugging.
>
> The documentation for reference classes does say that their methods should
be minimalist, which I suppose is partly because of this behavior.
>
> Is there a way around this behavior apart from passing the pieces of the
old instance to the new constructor, or putting all computations in not class
functions?
I am interested in learning how others deal with this issue, too.
I use the latter method during development. I write simple wrapper methods
around the functions I am working on. Once development becomes stable, I often
choose to incorporate the function in the method but not always. It's not a
great system but it allows me to tweak the function until I get it right without
a lot of fussing.
To my simpleton way of thinking, it seems like changes to the Reference Class
definition might be 'pushable' into a particular instance's
environment. I don't know how to make that happen in a user friendly way.
foo_f = function(x, a = 3) {a * x}
foo <- setRefClass("foo")
foo$methods(f = function(x, ...) {foo_f(x, ...)})
x <- foo$new()
x$f(10)
# [1] 30
x$f(10, a = 2)
# [1] 20
Cheers,
Ben
>
>> foo <- setRefClass("foo", methods=list(f=function(x) 3*x))
>> a <- foo()
>> a$f(10)
> [1] 30
>> foo <- setRefClass("foo", method=list(f=function(x) 2*x))
>> a$f(10)
> [1] 30
>> b <- foo()
>> b$f(10)
> [1] 20
>
> Ross Boylan
>
> ______________________________________________
> 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.
Ben Tupper
Bigelow Laboratory for Ocean Sciences
60 Bigelow Drive, P.O. Box 380
East Boothbay, Maine 04544
http://www.bigelow.org