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

Duncan Murdoch murdoch.duncan at gmail.com
Tue Aug 7 12:48:40 CEST 2012


Here's one more way.  It seems to me this is the most R-like way to do 
what you want:

   multiply_by_Y <- function(Y) {
     force(Y)
     function(x) x*Y
   }

   F <- multiply_by_Y(3)

The "force" call forces Y to be evaluated at that point, so its value is 
fixed from that point forward.

Duncan Murdoch

On 12-08-06 5:07 PM, Schoenfeld, David Alan,Ph.D.,Biostatistics wrote:
>
> 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