我遇到了lapply似乎延迟了我的函数评估的麻烦,我得到了一个完整的最后一个单元格的结果列表,但是如果我在apply函数中添加一个print语句就可以正常工作了(这是我案例中的简化示例) ):
p <- list ();
a <- function(..., s = function(p) p) {
fs <- list(...);
p <<- c(p, lapply(setNames(1:length(fs), names(fs)),
function(i) (function(n, f) {
function() s(f)
}) (names(fs)[i], fs[[i]])))
}
a(g = function() 2, r = function() 5)
评估lapply(p, function(p) p())
给出
$g
function ()
5
$r
function ()
5
但是如果我在内部函数中添加一个print语句,一切都很好:
p <- list ();
a <- function(..., s = function(p) p) {
fs <- list(...);
p <<- c(p, lapply(setNames(1:length(fs), names(fs)),
function(i) (function(n, f) {
print(n);
function() s(f)
}) (names(fs)[i], fs[[i]])))
}
a(g = function() 2, r = function() 5)
评估相同的lapply(p, function(p) p())
会给出预期的
$g
function ()
2
$r
function ()
5
我不明白这是怎么回事或我能做些什么,这是R版本3.1.1