为什么这段 R 代码被执行后得到的是 3?
本文介绍了为什么这段 R 代码被执行后得到的是 3?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
someList <- list();
for (i in 1:3) {
someList[[i]] <- (function (j) {
return(function () {
print(j);
});
})(i);
}
someList[[1]](); # 3
for (i in 1:3) {
someList[[i]] <- (function () {
j <- i;
return(function () {
print(j);
});
})();
}
someList[[1]](); # 1
然而 JavaScript 中,
var someList = [];
for (var i = 0; i < 3; i++) {
someList[i] = (function (j) {
return function () {
console.log(j);
};
})(i);
}
someList[0](); // 0
see also: https://bugs.r-project.org/bu...
解决方案
然而,只要把该变量在函数体内引用一遍,我们可以得到预料中的结果:
for (i in 1:3) {
someList[[i]] <- (function (j) {
j;
return(function () {
print(j);
});
})(i);
}
someList[[1]](); # 1
我自己对这个问题的回答是,我觉得为什么出现该结果的原因可能是 R 对传入的参数采用 lazy evaluation.
官方解答在: https://bugs.r-project.org/bu...
这篇关于为什么这段 R 代码被执行后得到的是 3?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文