Force evaluation of a symbol when a function is created
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.duncan at 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 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.
______________________________________________ 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.
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