我正在使用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
有谁知道发生了什么?提前,谢谢。
答案 0 :(得分:3)
您可以使用force功能:
listFuncs = lapply( 1:3,
function(X) {
force(X)
myfunc <- function(y) { X+y }
myfunc
}
)
listFuncs[[1]](10) ## 11