R 改变功能环境
我是R的新用户,我想知道是否有可能做到这一点:R 改变功能环境,r,R,我是R的新用户,我想知道是否有可能做到这一点: a = 2 <environment: R_GlobalEnv> f <- function(){ x = 1 y = 1 g() } <environment: 0xf1b79b8> g <- function(){ z = x + y + a } <
a = 2 <environment: R_GlobalEnv>
f <- function(){
x = 1
y = 1
g()
} <environment: 0xf1b79b8>
g <- function(){
z = x + y + a
} <environment: 0xf1b7a98>
问题:是否可以创建对全局和
f()
环境的g()
个性化访问?一种方法是在f()内部定义g()
:
a如果只想让函数能够从父框架获取变量,或者如果找不到,从全局环境获取变量,那么这应该是可行的(即使我不鼓励它*):
g嗯,不清楚你想要完成什么。。。无论如何,您可以在f
函数中定义g
函数……我想知道g()是否可以从f()访问GlobalEnv和tempEnv中的变量?为什么不只使用g(x,y)?如果没有更多的上下文来解释为什么要这样做,R程序员可能会认为这个问题类似于“我能用手提钻打开这罐桃子吗?”。答案可能是肯定的,但是……为什么定义其他环境很危险?我们这里也没有定义环境,只是没有使用默认的环境……但我不鼓励这种方法的原因不是环境,而是我在答案底部添加的;)
Error in g() : object 'x' not found
a <- 2
f <- function(){
g <- function(){
z <- x + y + a
}
x <- 1
y <- 1
g()
}
print(f()) ## 4
g <- function(env=parent.frame()){
z = get("x",envir=env) + get("y",envir=env) + get("a",envir=env)
return(z)
}
rm(list=ls(pattern='[^g]')) # to be sure the global env is empty except for g function
a = 2
f <- function(){
x = 1
y = 1
return(g())
}
f()
# returns 4