Truly Global Variables
On Sat, Jan 22, 2011 at 8:17 AM, Duncan Murdoch
<murdoch.duncan at gmail.com> wrote:
On 11-01-22 3:06 AM, Lui ## wrote:
Hello everybody,
I have a problem that is bothering me for ?quite a while now and I
don't know the answer... I want to create global variables (out of a
function) which I can access from all other functions... But somehow
that does not work too well. Attached some code for an example:
function_called<- function (){
? ? ? ?result = globalvariable*globalvariable
? ? ? ?print(result)
? ? ? ?}
function_calls<- function(){
? ? ? ?assign("globalvariable",10,pos=-1,envir=as.environment(pos))
This line doesn't make sense. ?Why specify both pos and envir? ?I would have used envir=globalenv() to do what you want; the help page indicates that pos=globalenv() is preferred by whoever wrote it. ?But don't use both. However, an even simpler approach is simply globalvariable <<- 10 This will search back through the environments associated with the function_calls function (not the call stack!) for a variable named globalvariable, and make the assignment to it. ?If none exists, it will use the global environment.
Or a bit safer:
assign("globalvariable", 10, .GlobalEnv)
Note that this type of code is sometimes an attempt to get into object
oriented programming through the back door. You might just want to
make it explicit. The proto package will let you do that. Below we
define a proto object, p, with components function_called and
function_calls and then later, within function_calls, we create a
third component of p called variable.
library(proto)
p <- proto(function_called = function (.) {
result = .$variable * .$variable
print(result)
},
function_calls = function(.) {
.$variable <- 10
.$function_called()
}
)
p$function_calls()
Statistics & Software Consulting GKX Group, GKX Associates Inc. tel: 1-877-GKX-GROUP email: ggrothendieck at gmail.com