R中函数内的函数调用

时间:2015-02-17 00:04:03

标签: r function lazy-evaluation

这是Hadley最新着作(Advanced R)的一个例子。我希望他不介意我发布它。

我很难理解为什么这段代码会做它的功能。 有人可以扩展吗?我如何将其划分为迷你步骤?

add <- function(x) {

    function(y) x+y
}

adders <- lapply(1:10,add)

我理解对“添加”功能的简单调用。

> add(2)(1)

[1] 3

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

当我们使用lapply这个函数时(这种方式),y如何赋值?

1 个答案:

答案 0 :(得分:1)

这并不是你最初的想法。直觉表明对lapply的调用会返回一个函数列表,这些函数会在其参数中添加1,2,3,...,10。

实际上,lapply(1:10,add)返回一个函数列表,每个函数都会在其参数中加上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
> 

很难看到使用这个结果。