R语言,我们可以传递函数作为参数

Lin*_*yin 2 r higher-order-functions

我正在使用R来构建数学模型.我想写一个函数f(a, b, g),它接受3个参数,最后一个是函数.我想知道我可以将函数作为参数传递给另一个函数吗?如果这是可能的,你们能给我一个简单的例子吗?谢谢.

李哲源*_*李哲源 7

将函数传递给函数参数当然是合法的.许多基本R函数都是这样做的.例如,

tapply(..., FUN)
Run Code Online (Sandbox Code Playgroud)

你可以检查一下?tapply.

问题是,您只将函数的名称视为符号.例如,在下面的玩具示例中:

foo1 <- function () print("this is function foo1!")
foo2 <- function () print("this is function foo2!")

test <- function (FUN) {
  if (!is.function(FUN)) stop("argument FUN is not a function!")
  FUN()
  }

## let's have a go!
test(FUN = foo1)
test(FUN = foo2)
Run Code Online (Sandbox Code Playgroud)

也可以通过函数参数foo1foo2test,通过使用....我留下这个给你做一些研究.


如果您熟悉C语言,那么理解为什么这是合法的并不难.R是用C语言编写的(虽然它的语言语法属于S语言),所以基本上这是通过使用函数指针来实现的.如果您想了解更多信息,请参阅C中的函数指针如何工作?