将2个参数的功能组合为N个参数的功能

时间:2018-12-10 00:40:10

标签: r function functional-programming

如果我有一个像union这样的函数,它接受两个集合的并集,是否有一种简洁的方法来编写一个可以将任意数量的集合并集的函数,即union_n(x, y, z, w) = union(x, union(y, union(z, w)))

3 个答案:

答案 0 :(得分:6)

尝试Reduce

x <- 1:3
y <- 2:4
z <- 3:5
w <- 4:9
Reduce(union, list(x, y, z, w))
## [1] 1 2 3 4 5 6 7 8 9

或作为功能:

union_n <- function(...) Reduce(union, list(...))
union_n(x, y, z, w)
## [1] 1 2 3 4 5 6 7 8 9

答案 1 :(得分:1)

我最终通过递归解决了这个问题

union_n <- function(x)
  if (length(x) == 1) x[[1]] else union(x[[1]], union_n(x[-1]))

但是,我愿意接受更优雅或计算效率更高的解决方案。

答案 2 :(得分:1)

没有递归的替代方法可能是这样:

U2 = function(...) { unique(c(...)) }

x = 1:3
y = 3:5
z = seq(2,8,2)

U2(x,y,z)
[1] 1 2 3 4 5 6 8