如何让辅助函数从主函数继承变量

How to have helper function inherit variables from main function

我想设置一个依赖辅助函数 foo() 的函数 bar()。我正在努力找出设置变量定义的最简洁方法,这样我就不必在 foo()bar().

中重复定义

这似乎应该有效但无效:

# helper function
foo <- function() {
 (a + b)/(c - d)
}

# main function
bar <- function(a, b, c, d) {
 z <- foo()
 z * 3
}

bar(a = 1, b = 2, c = 3, d =  4)

这可行,但在函数定义中感觉重复:

foo <- function(a, b, c, d) {
  (a + b)/(c - d)
}


# main function
bar <- function(a, b, c, d) {
  z <- foo(a, b, c, d)
  z * 3
}

bar(a = 1, b = 2, c = 3, d = 4)

先全局赋值是可行的,但不理想:

a <- 1
b <- 2
c <- 3
d <- 4 

foo <- function() {
  (a + b)/(c - d)
}

# main function
bar <- function(a, b, c, d) {
  z <- foo()
  z * 3
}

bar(a = a, b = b, c = c, d =  d)

有没有办法强制辅助函数识别主函数中定义的变量?

如果您在 bar 中定义 foo,则 foo() 将查找 abcd 在定义它的环境中。

bar <- function(a, b, c, d) {

  foo <- function() {
    (a + b)/(c - d)
  }

  z <- foo()
  z * 3
}

结果

bar(a = 1, b = 2, c = 3, d =  4)
# -9

您可以在此处阅读更多相关信息:http://adv-r.had.co.nz/Functions.html#lexical-scoping

“...查看当前函数的内部,然后是定义该函数的位置,依此类推,一直到全局环境,然后是其他加载的包。”