我想建立一个依赖于辅助功能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)
是否有一种方法可以强制助手函数识别主函数中定义的变量?
如果在foo
中定义bar
,则foo()
将在其定义的环境中查找a
,b
,c
和d
。
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
“ ...查看当前函数的内部,然后定义该函数的位置,依此类推,一直到全局环境,再到其他已加载的软件包。