Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何让助手函数从主函数继承变量_R_Function_Environment_Scoping - Fatal编程技术网

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

R 如何让助手函数从主函数继承变量,r,function,environment,scoping,R,Function,Environment,Scoping,我想设置一个函数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 =

我想设置一个函数
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如果在
bar
中定义
foo
,则
foo()
将在定义它的环境中查找
a
b
c
d

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

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

  z <- foo()
  z * 3
}
您可以在此处阅读更多信息:


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

方法是将值作为参数传递,或者通过在值上定义闭包,如markus的回答所示。传递相关参数并不是真正的“重复”,或者至少不是一种糟糕的方式。
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 <- 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