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