R中函数内的函数调用

function call within a function in R

这是 Hadley 最新著作(高级 R)中的示例。我希望他不介意我发布了它。

我很难理解为什么这段代码会执行它的操作。 有人可以对此进行扩展吗?如何将它分成小步骤?

add <- function(x) {

    function(y) x+y
}

adders <- lapply(1:10,add)

我理解对 "add" 函数的更简单调用。

> add(2)(1)

[1] 3

在某种程度上,2被分配给x,1被分配给y。

当我们将这个函数与lapply一起使用时(这样),y是如何赋值的?

这与您最初想的不太一样。直觉表明对 lapply 的调用将 return 一个函数列表,将 1, 2, 3, ..., 10 添加到它们的参数中。

事实上,lapply(1:10,add) return 是一个函数列表,每个函数的参数都加 10。

在控制台中,我尝试了一个更简单的版本

> v<-lapply(1:3, add)
> v
[[1]]
function (y) 
x + y
<environment: 0x28b0540>

[[2]]
function (y) 
x + y
<environment: 0x28af678>

[[3]]
function (y) 
x + y
<environment: 0x28af800>
> v[[1]](1)
[1] 4
> v[[2]](1)
[1] 4
> v[[3]](1)
[1] 4
> 

很难看出这个结果的用途。