2
我最近遇到了一些意想不到[R的行为,它可以以最简单的形式,用下面的代码被复制:一个R函数封闭环境
make.adder <- function(a) {function(x) {x + a}}
s <- list(1, 2)
adders <- lapply(s, make.adder)
我们现在所期望的加法器[1]是一个函数这增加了1,并且加法器[[2]]是它增加了2。然而的函数,
adders[[1]](1)
返回3(当我们可能已经预期2)。采取看看环境
environment(adders[[1]])$a
回报2,这是令人惊讶的再次(但一致的)。这里发生了什么?
我们看到类似的行为,如果我们尝试改用for循环:
adders <- list()
for (i in seq(1, 2)) {adders[[i]] <- make.adder(i)}
同样,加法器[1](1)返回3.我们如何可以创建100个函数列表,例如第i个函数是make.adder(i)?
尝试R. –
的最新版本,并尝试了这个问题http://stackoverflow.com/questions/16129902/explain-a-lazy-evaluation-quirk – rawr
而阅读[这里](http://adv-r.had.co.nz/Functions.html#function-arguments)我可能会添加几乎完全包含该示例。 – joran