Thank you both, this was very helpful. I need to study environments more. Do either of you know a good source?
-----Original Message----- From: Bert Gunter [mailto:gunter.ber...@gene.com] Sent: Monday, August 06, 2012 6:03 PM To: William Dunlap Cc: Schoenfeld, David Alan,Ph.D.,Biostatistics; r-help@r-project.org Subject: Re: [R] Force evaluation of a symbol when a function is created Thanks to both: Cute question, clever, informative answer. However, Bill, I don't think you **quite** answered him, although the modification needed is completely trivial. Of course, I could never have figured it out without your response. Anyway, I interpret the question as asking for the function definition to _implicitly_ pick up the value of Y at the time the function is defined, rather than explicitly assigning it in local(). The following are two essentially identical approaches: I prefer the second, because it's more transparent to me, but that's just a matter of taste. Y <- 3 F <-local({y <- Y;function(x)x*y}) G <- evalq(function(x)x*y,env=list(y=Y)) Yielding: > Y <- 3 > F <-local({y <- Y;function(x)x*y}) > G <- evalq(function(x)x*y,env=list(y=Y)) > F(5) [1] 15 > G(5) [1] 15 > Y <- 2 > F(5) [1] 15 > G(5) [1] 15 > F <-local({y <- Y;function(x)x*y}) > G <- evalq(function(x)x*y,env=list(y=Y)) > F(5) [1] 10 > G(5) [1] 10 Cheers, Bert On Mon, Aug 6, 2012 at 2:24 PM, William Dunlap <wdun...@tibco.com> wrote: > 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-boun...@r-project.org [mailto:r-help-boun...@r-project.org] On >> Behalf >> Of Schoenfeld, David Alan,Ph.D.,Biostatistics >> Sent: Monday, August 06, 2012 2:08 PM >> To: 'r-help@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@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 The information in this e-mail is intended only for the person to whom it is addressed. If you believe this e-mail was sent to you in error and the e-mail contains patient information, please contact the Partners Compliance HelpLine at http://www.partners.org/complianceline . If the e-mail was sent to you in error but does not contain patient information, please contact the sender and properly dispose of the e-mail. ______________________________________________ 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.