在R中使用额外参数对函数进行Reduce
我试图使用R中的在R中使用额外参数对函数进行Reduce,r,merge,functional-programming,reduce,R,Merge,Functional Programming,Reduce,我试图使用R中的Reduce函数跨多个数据帧使用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),
Reduce
函数跨多个数据帧使用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
据我所知,
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
Reduce(函数(x,y)合并(x,y,by=“id”,all=T),列表(a,b,c))
#身份证
#1 a
#2乙
#3C
#4d
#5 e
#6楼
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