R用lapply创建函数:bug还是什么?

时间:2015-03-29 13:56:10

标签: r lapply

我正在使用lapply来创建新函数,并注意到它有时会返回预期的内容,有时它只返回最后创建的函数的副本。

以下是插图的示例,请考虑我想制作以下简单的函数列表

listFuncs = lapply( 1:3, function(X){ 
  myfunc = function(y){X+y}
  myfunc
})

不幸的是,一个简单的评估显示我没有得到我希望的

listFuncs[[1]](10)
[1] 13
listFuncs[[2]](10)
[1] 13

实际上,该列表仅包含函数

myfunc = function(y){3+y}

但是,如果我在创建函数期间输出了某些内容,例如

listFuncs = lapply( 1:3, function(X){ 
  myfunc = function(y){X+y}
  print(myfunc(0)) ## NEW LINE HERE !!!
  myfunc
})

然后我的功能列表是"正如所料"

[1] 1
[1] 2
[1] 3
> listFuncs[[1]](10)
[1] 11
> listFuncs[[2]](10)
[1] 12

有谁知道发生了什么?提前,谢谢。

1 个答案:

答案 0 :(得分:3)

您可以使用force功能:

listFuncs = lapply( 1:3, 
    function(X) { 
        force(X)
        myfunc <- function(y) { X+y }
        myfunc
    }
)
listFuncs[[1]](10) ## 11