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
我正在使用 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