将此for循环转换为apply函数R.

时间:2016-01-21 06:20:17

标签: r for-loop mapply

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

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 type函数而不是for循环来实现。

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

谢谢!

2 个答案:

答案 0 :(得分:3)

我们可以使用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))

答案 1 :(得分: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