假设您的代码中有一个名为“ 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
}
最终,我们得到一个问题:函数仅返回对象,但应永久覆盖过程中使用的外部变量。有可能吗?
是的,即使不建议这样做,也可以,因为在函数环境之外进行任何更改不是函数的预期行为。不过,这是您可以执行的操作:
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
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句