【发布时间】:2019-05-10 21:49:07
【问题描述】:
如果我有一个像union 这样的函数,它接受两个集合的并集,有没有一种简洁的方法来编写一个接受任意数量集合的并集的函数,即union_n(x, y, z, w) = union(x, union(y, union(z, w)))?
【问题讨论】:
标签: r function functional-programming
如果我有一个像union 这样的函数,它接受两个集合的并集,有没有一种简洁的方法来编写一个接受任意数量集合的并集的函数,即union_n(x, y, z, w) = union(x, union(y, union(z, w)))?
【问题讨论】:
标签: r function functional-programming
试试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
【讨论】:
我最终通过递归解决了这个问题:
union_n <- function(x)
if (length(x) == 1) x[[1]] else union(x[[1]], union_n(x[-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
【讨论】: