R lapply延迟评估?

时间:2015-02-24 19:06:30

标签: r lapply

我遇到了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

0 个答案:

没有答案