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