让内部函数使用外部函数

时间:2018-04-14 15:17:36

标签: r function nested

我无法找到以下内容:其中有一个outer函数,其中调用了inner函数。 inner函数是递归的。这两个函数共享一些共同的参数abc,因为我希望outer函数将这些参数传递给innerabc基本上是inner的选项参数,需要可以从外部访问。

一个大大简化的版本可能看起来像这样

inner <- function(a, b, c, d, i = 0) {
  # Something
  inner(a = left, b = right, c, d, i = i + 1)
}

outer <- function(a, b, c, r, t) {
  d <- r^2
  inner(a = a, b = b, c = c, d = d)
}

现在,innerouter的电话对我来说似乎有点笨拙。我希望将abc自动传递给inner,而不必再次将它们显式传递给参数,因为它们是常量选项参数。关键可能是省略号/ ...但遗憾的是我无法找到答案......

非常感谢帮助!

干杯, 斯蒂芬

2 个答案:

答案 0 :(得分:3)

1)在外部函数中定义内部函数,内部函数可以访问外部函数的变量。虽然inner未传递给a,但outer使用a中的inner

outer <- function(a, x) {
  inner <- function(y) {
    a + y
  }

  inner(2 * x)
}

# test
outer(10, 100)
## [1] 210

2)或者,将inner注入outer,如下所示:

inner <- function(y) {
  a + y
}

outer <- function(a, x) {
  environment(inner) <- environment()    
  inner(2 * x)
}

# test
outer(10, 100)
## [1] 210

答案 1 :(得分:1)

另一种方法是写

outer <- function(r, t, ...) {
  d <- r^2
  inner(d = d, ...)
}

abc的值传递给outer会导致这些值自动传递到内部函数。此方法的唯一缺点是,outer函数不清楚abc的值是否必需。