2015-11-27 35 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,這取決於調用堆棧,並滿足您的需要。