2015-11-27 49 views
1

假设你的代码中有一个名为“ENV.myvar”的变量。然后你写了一个函数myfun,它有一些目标并返回一个对象(例如一个数组)。 ENV.myvar用于计算,并且由于某种原因它在此过程中被修改。如何更改声明为函数外的变量的值?

ENV.myvar <- 0; 
myfun <- function(in1,in2,...,inN){ 

#declaring the output object 
fun.myarray <- c(0,0,0); 

#some code 
... 
#here ENV.myvar is modified for some reason 
ENV.myvar = ENV.myvar + 20; 

#code that works on fun.myarray 
... 
#return the object 
fun.myarray 
} 

最后,我们得到了问题的要点:该函数返回唯一对象,而应永久覆盖的过程中使用的外部变量。在某种程度上可能吗?

回答

0

是的,即使不推荐,也可以改变环境以外的任何东西,这不是函数的预期行为。不过,这是你如何能做到这一点:

myvar <- 0 
myf <- function() { 
    assign("myvar", 10, envir = parent.env(environment())) 
    return("Value of 'myvar' changed to 10 in parent environment") 
} 
myf() 
myvar 
# [1] 10 

您可以更改parent.env(environment())部分得到一个特定的环境,或者只是.GlobalEnv,这取决于调用堆栈,并满足您的需要。

相关问题