代码之家  ›  专栏  ›  技术社区  ›  Eugene Brown

将此for循环转换为应用函数R

  •  0
  • Eugene Brown  · 技术社区  · 10 年前

    我有一个数据向量,如下所示:

    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])
      }
    }
    

    但是我想用一个apply类型的函数而不是for循环来实现。

    我不知道该怎么做。有什么建议吗?

    谢谢

    2 回复  |  直到 10 年前
        1
  •  3
  •   Community Mohan Dere    5 年前

    我们可以使用 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))
    
        2
  •  2
  •   nicola    10 年前

    使用 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