To close things out: credit is due to Thomas L rather than Luke T here: https://stat.ethz.ch/pipermail/r-help/2011-April/275905.html
Michael On Wed, Jan 18, 2012 at 2:06 PM, R. Michael Weylandt <michael.weyla...@gmail.com> wrote: > And to the OP: note the all-important "y <- NA" that starts off Bill's > example. That makes a variable "y" in the local environment so "<<-" > finds that first before it gets to searching the global environment > (and possibly assigning there). It's not so important it's an NA just > that it's initialized. > > (There's a great thread where Luke (I think?) talks about how "<<-" > should really be "super-assignment" rather than "global assignment" > somewhere in the archives; it explains why this is so important very > eloquently and was a real eye opener for me on how "<<-" could be > something other than trouble) > > Bill's solution is more flexible/powerful: but if you are setting the > constant once and plan to forget about it, I think mine will suffice. > > Michael > > On Wed, Jan 18, 2012 at 1:57 PM, William Dunlap <wdun...@tibco.com> wrote: >> Make an environment that the functions share. One way to do >> this is with local(): >> >>> test <- local({ y <- NA >> + f1 <- function(x) x + y >> + f2 <- function(y1) { y <<- y1 ; f1(1) } >> + list(f1=f1, f2=f2) }) >>> test$f2(2^(1:3)) >> [1] 3 5 9 >> >> (The example you showed must have had a typo in it, >> as it didn't give the error message you showed. I >> assume you typed 'test1(2,y1)' where you meant 'test1(2)'.) >> >> 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 statguy >>> Sent: Wednesday, January 18, 2012 10:30 AM >>> To: r-help@r-project.org >>> Subject: [R] How to define a variable in a function that another function >>> uses without using global >>> variables >>> >>> 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@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. ______________________________________________ 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.