我无法找到以下内容:其中有一个outer
函数,其中调用了inner
函数。 inner
函数是递归的。这两个函数共享一些共同的参数a
,b
,c
,因为我希望outer
函数将这些参数传递给inner
。 a
,b
,c
基本上是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)
}
现在,inner
内outer
的电话对我来说似乎有点笨拙。我希望将a
,b
,c
自动传递给inner
,而不必再次将它们显式传递给参数,因为它们是常量选项参数。关键可能是省略号/ ...但遗憾的是我无法找到答案......
非常感谢帮助!
干杯, 斯蒂芬
答案 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, ...)
}
将a
,b
和c
的值传递给outer
会导致这些值自动传递到内部函数。此方法的唯一缺点是,outer
函数不清楚a
,b
和c
的值是否必需。