[R] How to define a variable in a function that another function uses without using global variables

Duncan Murdoch murdoch.duncan at gmail.com
Wed Jan 18 21:57:31 CET 2012


On 18/01/2012 1:51 PM, R. Michael Weylandt wrote:
> Consider this example:
>
> power<- function(n){
>      function(x) x^n
> } # Note that this function returns a function!

One bit of advice that may matter sometime:  you should call force(n) to 
make sure it is evaluated before creating the new function.  Otherwise 
you get embarrassing results like this:

 > n <- 3
 > cube <- power(n)
 > n <- 2
 > cube(2)
[1] 4

Due to lazy evaluation, the n isn't evaluated until after it got changed 
to 2.  This version is safe:

power<- function(n){
     force(n)
     function(x) x^n
} # Note that this function returns a function!


Duncan Murdoch

> cube<- power(3)
>
> cube(2) # gives 8
>
> That make sense?
>
> Michael
>
> On Wed, Jan 18, 2012 at 1:30 PM, statguy<martinju at mail.com>  wrote:
> >  I would like to know if it is possible to make a function that defines a
> >  variable in another function without setting that variable globally?
> >
> >  I would i.e. be able to define a variables value inside a function ("one
> >  level above) which another function makes use of, without setting this
> >  variable globally.
> >
> >  I have provided this very simple illustrating example.
> >
> >  test1=function(x)
> >          {
> >          x+y
> >          }
> >  test2=function(y1)
> >          {
> >          y=y1
> >          test1(2,y1)
> >          }
> >
> >  Running the second function results in an error:
> >>  test2(1)
> >  Error in test1(2) : object 'y' not found
> >
> >  I see 2 possible solutions to this, but neither of them is preferred in my
> >  more complex situation:
> >
> >  1. Setting y<<-y_1 globally in test2-function
> >  2. making test1 a function of both x and y.
> >
> >  Is there any other way to do this except from the 2 above? I hope someone
> >  can help me with this.
> >
> >  --
> >  View this message in context: http://r.789695.n4.nabble.com/How-to-define-a-variable-in-a-function-that-another-function-uses-without-using-global-variables-tp4307604p4307604.html
> >  Sent from the R help mailing list archive at Nabble.com.
> >
> >  ______________________________________________
> >  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.



More information about the R-help mailing list