【发布时间】:2020-07-08 13:32:27
【问题描述】:
R inferno 将以下输出解释为挑战:
>xr <- lapply(11:14,function(i) function() i^2)
>sapply(1:4, function(j) xr[[j]]())
[1]196 196 196 196
我很惭愧地说我失败了。这是怎么回事?我的猜测是这与i^2 记住定义它的环境有关,但我很确定xr 的每个元素都使用了不同的i,这也排除了惰性评估的可能性问题。
【问题讨论】:
-
用
lapply(11:14,function(i) i^2)不是更好吗? -
使用你的代码我得到了
121 144 169 196 -
你会从他们的环境中得到
ienvironment(xr[[1]])$i -
@J.Mini 也许重新开始
R并尝试一个新的会话。 -
@Duck R Inferno 已经过时了。
lapply中的延迟评估在旧版本的 R 中的工作方式不同。