我如何理解这个R功能?

时间:2013-11-03 11:37:55

标签: r function

mfibR <- local({
    memo <- c(1, 1, rep(NA, 1000))
    f <- function(x) {
        if (x == 0) 
            return(0)
        if (x < 0) 
            return(NA)
        if (x > length(memo)) 
            stop("x too big for implementation")
        if (!is.na(memo[x])) 
            return(memo[x])
        ans <- f(x - 2) + f(x - 1)
        memo[x] <<- ans
        ans
    }
})

它没有函数体,但它实际上正确地返回了Fibonacci序列。

1 个答案:

答案 0 :(得分:5)

来自?local帮助页。

  

local 评估本地环境中的表达式。它是等价的   到evalq除了它的默认参数创建一个新的空   环境。这对于创建匿名递归函数很有用   并且作为一种有限的命名空间特征,因为变量定义于   从外面看不到环境。

请查看local功能帮助页面中的示例。它显示了如何使用local创建匿名函数。 local将返回上次评估的表达式。