使用R创建函数列表?

时间:2014-07-08 13:54:42

标签: r

我有以下R代码(这个问题的最后一部分),在最后一行之后,我希望得到一个4" retFun"函数,每个函数用不同的x初始化,以便得到以下结果

funList[[1]](1) == 7 #TRUE
funList[[2]](1) == 8 #TRUE

等等,但我似乎得到的是

funList[[1]](1) == 10 #TRUE
funList[[2]](1) == 10 #TRUE

好像列表中的每个函数都具有相同的x值

creatFun <- function(x, y)
{
  retFun <-  function(z)
  {
    z + x + y

  }
}


myL <- c(1,2,3,4)
funList <-sapply(myL, creatFun, y = 5)

1 个答案:

答案 0 :(得分:6)

这可能是(也可能是某个地方)关于懒惰评估在R中如何工作的练习。您需要在创建每个函数之前强制评估x

creatFun <- function(x, y)
{
    force(x)
  retFun <-  function(z)
  {
    z + x + y
  }
}

...为了安全起见,在您没有为该参数传递单个值时,您应该force(y)

可以在Hadley即将出版的书中找到一个很好的讨论,特别是函数章节中的lazy evaluation部分(向下滚动)。