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
>
很难看出这个结果的用途。
这是 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
>
很难看出这个结果的用途。