Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R使用lappy生成函数:bug还是什么?_R_Lapply - Fatal编程技术网

R使用lappy生成函数:bug还是什么?

R使用lappy生成函数:bug还是什么?,r,lapply,R,Lapply,我正在使用lappy创建新函数,并注意到有时它返回预期的结果,有时它只返回最后创建的函数的副本 这里是一个例子,考虑我想做以下简单的函数清单< /P> listFuncs = lapply( 1:3, function(X){ myfunc = function(y){X+y} myfunc }) 不幸的是,一个简单的评估表明我没有得到我所希望的 listFuncs[[1]](10) [1] 13 listFuncs[[2]](10) [1] 13 实际上,列表只包含函数 myfu

我正在使用lappy创建新函数,并注意到有时它返回预期的结果,有时它只返回最后创建的函数的副本

这里是一个例子,考虑我想做以下简单的函数清单< /P>

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
})
那么我的函数列表就是“如预期的那样”

有人知道发生了什么吗?请提前通知,谢谢。

您可以使用以下功能:

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

myfunc不是一个bug,它是一个特性。研究一下“懒惰评估”的概念。@Roland我对关于r-devel开始的长时间讨论感到惊讶,这似乎包括了对这是一个bug这一立场的认真考虑(至少是Radford)。这是我第一次看到“官方”大家都接受这个想法。看起来只有雷德福德·尼尔和杰伦·奥姆斯称之为bug,而且他们两人都不是官方的;尼尔显然非常理解R,但他经常不同意R-core。@BenBolker我接受了卢克等人的开放式意见,改变了行为(或至少讨论了它)默许至少是不可取的。
listFuncs = lapply( 1:3, 
    function(X) { 
        force(X)
        myfunc <- function(y) { X+y }
        myfunc
    }
)
listFuncs[[1]](10) ## 11