【问题标题】:Convert this for loop to an apply function R将此 for 循环转换为应用函数 R
【发布时间】:2016-01-21 06:20:16
【问题描述】:

我有如下数据向量:

data <- c(1, 3, 4, 7)

我想对向量中的每一对元素应用一个函数,这样它将返回一个上三角矩阵,如下所示:

mat <- matrix(data = NA, nrow = length(data), ncol = length(data))
for (i in 1:(length(data) - 1)) {
  for (j in (i+1):length(data)) {
    mat[i, j] <- "-"(data[j], data[i])
  }
}

但我想使用应用类型函数而不是 for 循环来做到这一点。

我不确定该怎么做。有什么建议吗?

谢谢!

【问题讨论】:

    标签: r for-loop mapply


    【解决方案1】:

    我们可以使用combn

    mat[lower.tri(mat, diag=FALSE)] <- combn(data, 2,
                                FUN= function(x) x[2]-x[1])
    t(mat)
    #      [,1] [,2] [,3] [,4]
    #[1,]   NA    2    3    6
    #[2,]   NA   NA    1    4
    #[3,]   NA   NA   NA    3
    #[4,]   NA   NA   NA   NA
    

    数据

    mat <- matrix(data = NA, nrow = length(data), ncol = length(data))
    

    【讨论】:

    • @nicola 感谢 cmets。看起来它现在已经修复了。
    【解决方案2】:

    使用outer

    t(outer(data,data,"-"))*
        NA^lower.tri(matrix(0,length(data),length(data)),diag=TRUE)
    #     [,1] [,2] [,3] [,4]
    #[1,]   NA    2    3    6
    #[2,]   NA   NA    1    4
    #[3,]   NA   NA   NA    3
    #[4,]   NA   NA   NA   NA
    

    【讨论】:

      猜你喜欢
      • 2020-06-03
      • 2020-10-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-01
      • 2021-12-29
      • 1970-01-01
      • 2020-11-02
      • 1970-01-01
      相关资源
      最近更新 更多