【问题标题】:Compose Function of 2 Arguments to Function of N Arguments将 2 个参数的函数组合成 N 个参数的函数
【发布时间】:2019-05-10 21:49:07
【问题描述】:

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

【问题讨论】:

    标签: r function functional-programming


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        【解决方案3】:

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

        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
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-01-02
          • 1970-01-01
          • 2012-09-22
          • 1970-01-01
          • 2022-08-24
          • 2020-01-23
          相关资源
          最近更新 更多