[R] Force evaluation of a symbol when a function is created

William Dunlap wdunlap at tibco.com
Mon Aug 6 23:24:11 CEST 2012


You could use local(), as in
   > F <- local({
   +        Y <- 3
   +        function(x) x * Y
   +    })
   >    F(7)
   [1] 21
   > Y <- 19
   > F(5)
  [1] 15

Look into 'environments' for more.

Bill Dunlap
Spotfire, TIBCO Software
wdunlap tibco.com


> -----Original Message-----
> From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org] On Behalf
> Of Schoenfeld, David Alan,Ph.D.,Biostatistics
> Sent: Monday, August 06, 2012 2:08 PM
> To: 'r-help at r-project.org'
> Subject: [R] Force evaluation of a symbol when a function is created
> 
> 
> I am porting a program in matlab to R,
> The problem is that Matlab has a feature where symbols that aren't arguments are
> evaluated immediately.
> That is:
> Y=3
> F=@(x) x*Y
> 
> Will yield a function such that F(2)=6.
> If later say. Y=4 then F(2) will still equal 6.
> 
> R on the other hand has lazy evaluation.
> F<-function(x){x*Y}
> Will do the following
> Y=3
> F(2)=6
> Y=4
> F(2)=8.
> Does anyone know of away to defeat lazy evaluation in R so that I can easily simulate the
> Matlab behavior.  I know that I can live without this in ordinary programming but it would
> make my port much easier.
> 
> Thanks.
> 
> 
> 
> 
> The information in this e-mail is intended only for the ...{{dropped:14}}
> 
> ______________________________________________
> 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.



More information about the R-help mailing list