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)
我很困惑为什么第二个不起作用。我的理解是这两个表达式是完全等价的。我的理解是否有缺陷?
欢迎所有帮助!
答案 0 :(得分:1)
do.call
一次遍历b
一个元素,但不是以你需要的方式递归。您需要Reduce(funMergeA, b)
。