我是R的新用户,我想知道是否可以这样做:
a = 2 <environment: R_GlobalEnv>
f <- function(){
x = 1
y = 1
g()
} <environment: 0xf1b79b8>
g <- function(){
z = x + y + a
} <environment: 0xf1b7a98>
Error in g() : object 'x' not found
问题:是否可以为全球和g()
环境创建f()
个性化访问权限?
答案 0 :(得分:5)
执行此操作的一种方法是在 g()
内定义f()
:
a <- 2
f <- function(){
g <- function(){
z <- x + y + a
}
x <- 1
y <- 1
g()
}
print(f()) ## 4
答案 1 :(得分:3)
如果只是希望函数能够从父框架中获取变量,或者如果没有找到,则从全局环境中获取变量,这应该可行(即使我不鼓励*):
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
(*)我不鼓励这主要有两个原因:
g
做了什么以及需要x
,y
和a
。