Duncan, et.al: Many thanks: let the closure do the work automatically rather than manually manipulating it.
However, in the spirit of the OP's original request, I believe the call would be: >Y <- 3 ## That is, Y gets a value at some prior point, perhaps >programmatically. > F <- multiply_by_Y(Y) # ... F picks up this value "implicitly" -- no need > for explicit assignment. But then there is no need for force(), is there? > fy <- function(Y)function(x) x*Y > Y <- 2 > F <- fy(Y) > F(5) [1] 10 > Y <- 3 > F(5) [1] 10 > G <- fy(Y) > G(5) [1] 15 That is, one simply relies on lexical scoping/closures to "retain" the value of Y used as a free variable in function(x)x*Y when it is defined. No need to explicitly force() it. If wrong, I would be grateful for correction. This appears to me to duplicate the Matlab behavior rather closely. -- Bert On Tue, Aug 7, 2012 at 3:48 AM, Duncan Murdoch <murdoch.dun...@gmail.com> wrote: > 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@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. >> > > ______________________________________________ > 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. -- Bert Gunter Genentech Nonclinical Biostatistics Internal Contact Info: Phone: 467-7374 Website: http://pharmadevelopment.roche.com/index/pdb/pdb-functional-groups/pdb-biostatistics/pdb-ncb-home.htm ______________________________________________ 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.