【问题标题】:Applying a function to all combinations of elements将函数应用于元素的所有组合
【发布时间】:2023-01-24 21:50:08
【问题描述】:

假设我有一个包含三个变量的函数,例如

f <- function(x,y,z) x*y*z

现在,给定三个数据集

X <- seq(1,10)
Y <- seq(11,20)
Z <- seq(21,30)

我想有效地评估来自X,Y,Z 的所有元素组合的f。最聪明的方法是什么? (实际上,我的功能比较复杂,集合很大)。

【问题讨论】:

    标签: r


    【解决方案1】:

    使用 expand.grid 创建组合并迭代生成的数据框:

    f <- function(x,y,z) x*y*z
    
    X <- seq(1,10)
    Y <- seq(11,20)
    Z <- seq(21,30)
    
    df = expand.grid(X, Y, Z)
    
    for (i in 1:nrow(df)) {
        print(f(df[i, 1], df[i, 2], df[i, 3]))
    }
    

    【讨论】:

      【解决方案2】:

      也许这个

      X <- 1:3
      Y <- 4:6
      Z <- 7:9
      
      apply(expand.grid(X,Y,Z), 1, function(x) prod(x))
       [1]  28  56  84  35  70 105  42  84 126  32  64  96  40  80 120  48  96 144  36
      [20]  72 108  45  90 135  54 108 162
      

      【讨论】:

        猜你喜欢
        • 2016-05-02
        • 1970-01-01
        • 2017-03-09
        • 2010-10-23
        • 2020-02-04
        • 2016-02-20
        • 2019-04-20
        • 2013-10-13
        • 1970-01-01
        相关资源
        最近更新 更多