首页 文章

2个参数对N个参数函数的组合作用

提问于
浏览
0

如果我有一个像 union 这样的函数,它取两个集合的联合,那么有一个简洁的方法来编写一个函数,它接受任意数量的集合,即 union_n(x, y, z, w) = union(x, union(y, union(z, w)))

3 回答

  • 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
    
  • 4

    我最终用递归解决了这个问题:

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

    但是,我对更优雅或计算效率更高的解决方案持开放态度 .

  • 0

    试试 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
    

相关问题