[R] best practice(s) for retrieving a local variable from a closure

Gabor Grothendieck ggrothendieck at gmail.com
Sat Apr 9 21:40:19 CEST 2011


On Sat, Apr 9, 2011 at 3:27 PM, Barry Rowlingson
<b.rowlingson at lancaster.ac.uk> wrote:
> On Sat, Apr 9, 2011 at 6:29 PM, Benjamin Tyner <btyner at gmail.com> wrote:
>
>>> 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'.
>
>  Once you start doing a lot of that though you may as well go the
> whole OO hog and use the proto or R.oo packages...
>
> Barry
>

In the case of proto it would be this:


library(proto)
mq <- proto(fun = function(., x) x^.$a)
mq$a <- 2
mq$a # 2
mq$fun(3) # 9

or you could make explicit getter and setter functions though, as
seen, they are not really needed:

mq <- proto(fun = function(., x) x^.$a,
		getA = function(.) .$a,
		setA = function(., a) .$a <- a)

mq$setA(3)
mq$getA() # 3
mq$fun(4) # 64



-- 
Statistics & Software Consulting
GKX Group, GKX Associates Inc.
tel: 1-877-GKX-GROUP
email: ggrothendieck at gmail.com



More information about the R-help mailing list