如果函数(x)可以工作,为什么我们需要function()?

时间:2013-02-14 20:58:11

标签: r

我理解“function(x)”是如何工作的,但是“function()”在这里的作用是什么?

z <- function() {
  y <- 2
  function(x) {
    x + y
  }
}

3 个答案:

答案 0 :(得分:5)

function是一个关键字,它是函数创建的一部分(在编程意义上Gilles describes in his answer)。其他部分是参数列表(在括号中)和函数体(在括号中)。

在您的示例中,z是一个不带参数的函数。它返回一个带有1个参数的函数(名为x)(因为R默认返回最后一个计算语句作为返回值)。该函数返回其参数x加2。

调用z时(没有参数:z())它将{2}分配给y(在函数变量范围内,这是我不打算进入的另一个概念)。然后它创建一个函数(没有名称),它接受一个名为x的参数,当它自己被调用时,返回它的参数x加2.从调用{{{1}返回该匿名函数。 1}},并且,据推测,存储以便以后可以调用。

有关将函数作为对象传递的更多讨论,请参阅https://github.com/hadley/devtools/wiki/Functionshttps://github.com/hadley/devtools/wiki/Functionals

答案 1 :(得分:3)

“功能”一词在mathematicsprogramming中的含义有所不同。在数学中,函数是参数的每个可能值与结果之间的对应关系。在编程中,函数是一系列指令,用于计算参数的结果。

在数学中,没有参数的函数是常数。在编程中,情况并非如此,因为函数可以有side effects,例如打印一些东西。因此,您将遇到许多在程序中没有参数的函数。

函数function(x) { x + y }是否取决于变量y。没有副作用,所以这个函数非常像$ f(x)= x + y $定义的数学函数。但是,此定义仅对给定值y完成。上一条指令将y设置为2,所以

function() {
  y <- 2
  function(x) {
    x + y
  }
}

相当于

function () {
  function(x) {
    x + 2
  }
}

在某种意义上,两个定义在应用于相同值时会产生相同的结果。但是,它们的计算方式略有不同。

该函数的名称为z。当你调用z(没有参数,所以你写z())时,这会构建函数function (x) { x + 2 },或类似的东西:z()是一个参数的函数,它添加了2其论点。所以你可以写z()(3)之类的东西 - 结果是5。

这显然是一个玩具的例子。随着课程的进展,你会看到越来越复杂的例子,其中这种功能构建与其他功能相结合,以实现有用的东西。

答案 2 :(得分:1)

使用some help我已经选择了一些没有正式参数的函数示例来帮助您理解它们为什么有用。

有副作用的功能

    例如,
  • plot.new()初始化图形设备。
  • 想要更新控制台缓冲区吗? flush.console()有你的背。

目的狭窄的功能

这可能是大多数情况。

  • 想知道日期/时间?致电date()
  • 想知道R的版本?致电getRversion()