减少R中函数的额外参数

Ama*_*one 7 reduce merge functional-programming r

我正在尝试使用ReduceR中的merge函数来跨多个数据帧使用该函数.问题是,我想将merge函数与参数一起使用all=T,似乎无处可在高阶Reduce函数中指定它.

所以我想:

a <- data.frame(id=c(1, 2, 3, 4), a=c('a', 'b', 'c', 'd'))
b <- data.frame(id=c(1, 2, 5, 6), b=c('a', 'b', 'e', 'f'))
c <- data.frame(id=c(3, 4, 5, 6), c=c('c', 'd', 'e', 'f'))

out <- Reduce(merge, list(a, b, c), all=T)

out
  id    a    b   c
1  1    a    a <NA>
2  2    b    b <NA>
3  3    c <NA>   c
4  4    d <NA>   d
5  5 <NA>    e   e
6  6 <NA>    e   e
Run Code Online (Sandbox Code Playgroud)

但因为merge默认all=F,我得到的是:

[1] id a  b  c 
<0 rows> (or 0-length row.names)
Run Code Online (Sandbox Code Playgroud)

Psi*_*dom 16

据我所知,Reduce无法处理要传递给函数参数的额外参数.但您可以merge使用自定义参数重新定义函数,并将其作为匿名函数传递给Reduce:

Reduce(function(x, y) merge(x, y, by = "id", all = T), list(a, b, c))

#  id    a    b    c
#1  1    a    a <NA>
#2  2    b    b <NA>
#3  3    c <NA>    c
#4  4    d <NA>    d
#5  5 <NA>    e    e
#6  6 <NA>    f    f
Run Code Online (Sandbox Code Playgroud)