Thanks Bill and Gabor!
William Dunlap wrote:
-----Original Message-----
From: r-help-boun...@r-project.org
[mailto:r-help-boun...@r-project.org] On Behalf Of Benjamin Tyner
Sent: Friday, April 08, 2011 6:48 PM
To: r-help@r-project.org
Subject: [R] best practice(s) for retrieving a local variable
from a closure
Greetings,
Say I have defined
mp <- function(a) function(x) x^a
f2 <- mp(2)
and I would like to retrieve the "a" which is local to f2.
Two options
come to mind;
get("a", envir=environment(f2))
eval(substitute(a), environment(f2))
I'm curious if one of these is preferred over the other in terms of
efficiency, robustness, aesthetics, etc. Or perhaps someone can share
another way to skin this cat, besides wrappers around eval() like
evalq(a, environment(f2))
with(environment(f2), a)
You can also use a list-like notation with environments:
> environment(f2)$a
[1] 2
> environment(f2)[["a"]]
[1] 2
> environment(f2)$a <- 3:1
> f2(2)
[1] 8 4 2
The above feels a bit like snooping where I wasn't invited.
You could do something like
mq <- function(a) {
force(a)
list(getA = function()a,
setA = function(newA) a <<- newA,
fun = function(x)x^a
)
}
to make it clear that you expect people to look at or change
fun's 'a'.
> f3 <- mq(3)
> f3$fun(5)
[1] 125
> f3$getA()
[1] 3
> f3$setA(4:1)
> f3$fun(3)
[1] 81 27 9 3
I don't code like this much so haven't developed a sense of
aesthetics about these variants.
Bill Dunlap
Spotfire, TIBCO Software
wdunlap tibco.com
Also, I'd like to confirm that I have used the correct terminology in
the subject line, that "a" is a local variable with respect
to f2, which
is a closure?
Thanks,
Ben
______________________________________________
R-help@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.