R中的do.call循环期间函数中未使用的参数错误

时间:2017-07-26 10:27:37

标签: r dataframe merge do.call

funMergeA <- function(x,y = NULL) {
    if (is.null(y)) {
        return(x)
    } else {
        return(funMerge(x,y,"a"))
    }
}

funMerge <- function(x,y,myby="a") {
    return(merge.data.frame(x,y,by=myby,all=TRUE))
}

b <- list(data.frame(a=1:10,b=rnorm(10)),
          data.frame(a=1:10,b=rnorm(10)),
          data.frame(a=1:10,b=rnorm(10)))

这有效:

funMergeA(funMergeA(funMergeA(b[[1]],NULL),b[[2]]),b[[3]])

这不是:

do.call(funMergeA,b)

我很困惑为什么第二个不起作用。我的理解是这两个表达式是完全等价的。我的理解是否有缺陷?

欢迎所有帮助!

1 个答案:

答案 0 :(得分:1)

do.call一次遍历b一个元素,但不是以你需要的方式递归。您需要Reduce(funMergeA, b)