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

问题描述 投票:0回答:1

我想建立一个依赖于辅助功能bar()的功能foo()。我正在努力找出最简单的方法来设置变量定义,因此不必在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)

是否有一种方法可以强制助手函数识别主函数中定义的变量?

r function environment scoping
1个回答
1
投票

如果在foo中定义bar,则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

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

© www.soinside.com 2019 - 2024. All rights reserved.