我了解“function(x)”的工作原理,但“function()”在这里的作用是什么?
z <- function() {
y <- 2
function(x) {
x + y
}
}
我了解“function(x)”的工作原理,但“function()”在这里的作用是什么?
z <- function() {
y <- 2
function(x) {
x + y
}
}
function
是一个关键字,它是函数创建的一部分(在Gilles 在他的回答中描述的编程意义上)。其他部分是参数列表(在括号中)和函数体(在大括号中)。
在您的示例中,z
是一个不带参数的函数。它返回一个带有 1 个参数(名为 )的函数x
(因为默认情况下 R 返回最后一个评估的语句作为返回值)。该函数返回其参数x
加 2。
当z
被调用(不带参数z()
:)时,它会将 2 分配给y
(在函数变量范围内,这是一个我不会涉及的附加概念)。然后它创建一个函数(没有名称),它接受一个名为 的参数x
,当它自己被调用时,它返回它的参数x
加 2。该匿名函数从调用返回,z
并且可能被存储,以便以后可以调用它.
有关将函数作为对象传递的更多讨论,请参见https://github.com/hadley/devtools/wiki/Functions和https://github.com/hadley/devtools/wiki/Functionals 。
“函数”这个词在数学和编程中的含义有些不同。在数学中,函数是参数的每个可能值与结果之间的对应关系。在编程中,函数是从参数计算结果的指令序列。
在数学中,没有参数的函数是常数。在编程中,情况并非如此,因为函数可能有副作用,比如打印一些东西。所以你会在程序中遇到很多没有参数的函数。
Hre 函数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。
这显然是一个玩具示例。随着您在讲座中的进步,您将看到越来越复杂的示例,其中此类功能构建与其他功能混合以实现有用的东西。
在一些帮助下,我挑选了一些没有正式参数的函数示例,以帮助您理解它们为什么有用。
有副作用的函数
plot.new()
例如,初始化图形设备。flush.console()
支持你。用途狭窄的功能
这可能是大多数情况。
date()
。getRversion()
。