R make 函数 lapply: bug 还是什么?

R make functions with lapply: bug or what?

我正在使用 lapply 创建新函数并注意到有时它 returns 是预期的,有时它 returns 只是最后创建的函数的副本。

这里有一个例子来说明,考虑到我想制作以下简单的函数列表

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
})

那么我的函数列表是"as expected"

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

有人知道这是怎么回事吗?提前,谢谢。

您可以使用force函数:

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