[R] How to use current value of variable in function definition?

Peter Dalgaard p.dalgaard at biostat.ku.dk
Thu Jul 2 22:35:44 CEST 2009


Mark Wardle wrote:
> Hi.
> 
> I've stared at your code for a number of minutes and can't understand
> what you're trying to achieve here. It looks as if you're fighting
> scope - it may be worth refactoring your approach to simplify matters.
> Otherwise, it sounds like a recipe for obfuscation! What are you
> trying to do really?

Not really obfuscation, there are legitimate reasons to want this sort 
of behaviour. See demo(scoping) for a related example

I think the canonical way is to define the function in an environment 
that contains c

foo <- local({c <- 1 ; function() print(c) })

which really isn't much different from what his "painful" code is doing.

> b/w
> 
> Mark
> 
> 2009/7/2 Allan Engelhardt <allane at cybaea.com>:
>> Must be the heat or something but I can't get my brain into gear and figure
>> out how to get something like
>>
>> if (1) { c <- 1; foo <- function () print(c); }
>> c <- 2
>> foo()
>>
>> to print 1, not 2.  (The real life example is a little more complex, but you
>> get the idea.  I don't want the variable c in the function definition, I
>> want its value at that time.)
>>
>> The only thing I have been able to come up with is something like
>>
>> if (1) foo <- (function () { c <- 1; return(function () print(c)) })()
>> c <- 2
>> foo()
>> # [1] 1
>>
>> but that just hurts.  Please make the pain go away.
>>
>> Can someone wake up my brain?
>>
>> Allan.
>>
>> ______________________________________________
>> 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.
>>
>>
> 
> 
> 


-- 
    O__  ---- Peter Dalgaard             Øster Farimagsgade 5, Entr.B
   c/ /'_ --- Dept. of Biostatistics     PO Box 2099, 1014 Cph. K
  (*) \(*) -- University of Copenhagen   Denmark      Ph:  (+45) 35327918
~~~~~~~~~~ - (p.dalgaard at biostat.ku.dk)              FAX: (+45) 35327907




More information about the R-help mailing list