On 08/10/2014 5:53 AM, H. Dieter Wilhelm wrote:
Duncan Murdoch <murdoch.dun...@gmail.com> writes:

> On 07/10/2014 2:45 AM, H. Dieter Wilhelm wrote:
>> Hello (),
>>
>> I'd like to do the following
>>
>> a <- 3
>> f1 <- function (x){
>>   a*x^2
>> }
>>
>> a <- 5
>> f2 <- function (x){
>>   a*x^2
>> }
>>
>> plotting f1, f2, ...
>>
>> but f1 and f2 are the same, how can I evaluated the variables in the
>> function definition?
>>
>> Thank you
>>        Dieter
> See the "open.account" example in section 10.7, "Scope", of the
> Introduction to R manual.

Sorry but above section teaches my how to change global variables in
functions.

That's only part of what it tells you. The open.account example binds values into the environment of the function. That's what you want to do: when you create f1, you want the values of a,b,c, etc. bound into its environment. Then when you create f2, you want new values bound there. So do it something like this:

makefun <- function(a,b,c,d) {
  force(a); force(b); force(c); force(d) # evaluate them now!
  function(x)  a*x+b*exp(x)+c/x+...
}

a <- complicated_a_computation(args1)
b <- complicated_b_computation(args1)
c <- ...
d
...

f1 <- makefun(a,b,c,d)

a <- complicated_a_computation(args2)
b <- complicated_b_computation(args2)
c <- ...
d
...

f2 <- makefun(a,b,c,d)

Duncan Murdoch

  But I would like to overcome the "lazy evaluation" of global
variables in functions.  Because I can't put expensive computations into
each function.

a <- complicated_a_computation(args1)
b <- complicated_b_computation(args1)
c <- ...
d
...

f1 <- function(x) a*x+b*exp(x)+c/x+...

a <- complicated_a_computation(args2)
b <- complicated_b_computation(args2)
c <- ...
d
...

f2 <- function(x) a*x+b*exp(x)+c/x +...

Yes in principle I could rename the global variables to a1, a2, b1, b2,
...  But I'd like to learn the principles of R.  Is above somehow
possible with the use of the substitute() command?

Thanks

______________________________________________
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.

Reply via email to