在R中的函数参数中计算(…)

在R中的函数参数中计算(…),r,function,R,Function,我有以下职能: ignore <- function(...) NULL tee <- function(f, on_input = ignore, on_output = ignore) { function(...) { on_input(...) output <- f(...) on_output(output) output } } 我的问题是关于。。。在tee函数的on_输入中计算的表达式?我知道在ignore函数的情况下,它只

我有以下职能:

ignore <- function(...) NULL
tee <- function(f, on_input = ignore, on_output = ignore) {
function(...) {
    on_input(...)
    output <- f(...)
    on_output(output)
    output
  }
}

我的问题是关于。。。在tee函数的on_输入中计算的表达式?我知道在ignore函数的情况下,它只接受任何参数,仍然返回空值。但是,我不确定on_输入和on_输出是否为函数,也不确定在这种情况下on_输入和输出函数会发生什么情况

你从威克姆图书高级R中获取了代码。 在这本书中你可以找到一个例子

g <- function(x) cos(x) - x
zero <- uniroot(g, c(-5, 5))
show_x <- function(x, ...) cat(sprintf("%+.08f", x), "\n")

# The location where the function is evaluated:
zero <- uniroot(tee(g, on_input = show_x), c(-5, 5))
您可以想象on_输入和on_输出是与函数的输入和输出一起工作的函数。 例如,在本例中,您正在g函数上打印每次迭代的输入

zero <- uniroot(tee(g, on_output = show_x), c(-5, 5))
相反,在这种情况下,您将在每次迭代中打印函数的输出

总之,on_input和on_output是函数,此函数仅与函数f的输入和输出一起工作

编辑

这只是一个更容易理解的例子

pow2<-function(x){x^2}
input<-function(x){
  cat(paste("input is ",x,"\n",sep=""))
}
output<-function(x){
  cat(paste("output is ",x,"\n",sep=""))
}

tee(pow2,on_input=input,on_output=output)(2)

input is 2
output is 4
[1] 4
这里的主要功能显然是pow2

tee获取pow2并返回一个在_输入、pow2和_输出上运行的函数

还要注意,您必须调用一个参数并将其传递给tee的结果,事实上tee返回的是一个函数而不是一个值

。。。匹配所有传递的附加参数

tee接受三个参数f、on_输出和on_输入,这些参数必须是函数,否则会出现错误并返回函数。那么如果富