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

William Dunlap wdunlap at tibco.com
Wed Jan 18 19:57:11 CET 2012


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-bounces at r-project.org [mailto:r-help-bounces at r-project.org] On Behalf Of statguy
> Sent: Wednesday, January 18, 2012 10:30 AM
> To: r-help at 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 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