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 } <

我是R的新用户,我想知道是否有可能做到这一点:

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