Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在R中使用额外参数对函数进行Reduce_R_Merge_Functional Programming_Reduce - Fatal编程技术网

在R中使用额外参数对函数进行Reduce

在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),

我试图使用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), 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