fa <- function(x){x+1}
fb <- function(x){x-1}
f1 <- function(x, y){f(x)^y}
f2 <- function(x, ab, y){
if(ab == 'a'){
f <- fa
} else {
f <- fb
}
f1(x, y)
}
f2(0, 'a', .5)
Error in f1(x, y) : could not find function "f"
以上不起作用,因为f
未在f1
' 环境中定义。
什么是使这项工作的好方法?那
- 避免将全局环境中的所有内容传递给
f2
's 环境 - 避免必须重新定义内部函数
f2
(这会很麻烦,并为复制/粘贴错误创造机会)
定义某种“子全局”环境,并将我希望每个人都使用的东西放在这个环境中,然后让每个函数都能够从“子全局”访问东西是否有意义?然后以某种方式确保子全局始终是全局的严格子集?如果明智的话,我会怎么做?