2015-11-27 3 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, в зависимости от стека вызовов и ваших потребностей.

Смежные вопросы