在 R 中对矩阵的每两(不同)列进行操作的最快方法?

Quickest way to do an operation on every two (different) columns of a matrix in R?

假设我们有一个 n×4 矩阵,我们希望找到该矩阵每 2 个不同列的平均值。在组合语言中,我们本质上想要找到所有不同的方法,我们可以从 4 列中选择 2 列并找到它们的每个平均值(或任何其他操作)。我们知道这意味着 6 种不同的组合:(1,2), (1,3), (1,4), (2,3), (2,4), (3,4),
然后我们将继续对 6 对中的每一对进行感兴趣的操作。如何将此练习扩展到 R 中的一般 n×m 矩阵?

谢谢。

这可能不是最快的方法(如标题中所要求的),但这种方法清晰且灵活。

这里我假设m=4,利息的计算是两列均值的总和:

# create example data (n-by-m matrix of values)
n <- 200
m <- 4
mat <- matrix(runif(n*m), nrow=n, ncol=m)

# get all column pairs
pairs <- t(combn(m, 2))
P <- nrow(pairs)

# allocate an "empty" vector to hold the results
result <- vector(length=P)

# loop over column pairs
for(p in 1:P) {
    i <- pairs[p,1]
    j <- pairs[p,2]
    result[p] <- mean(mat[,i]) + mean(mat[,j])
}

# view result
cbind(pairs, result)

DanY 解决方案恰到好处。我建议对于非常大的数据集,应用函数可能会更快。 DanY 解决方案,但具有 apply() 功能:

# create example data (n-by-m matrix of values)
n <- 200
m <- 4
mat <- matrix(runif(n*m), nrow=n, ncol=m)

# get all column pairs
pairs <- t(combn(m, 2))
P <- nrow(pairs)

# allocate an "empty" vector to hold the results
result <- vector(length=P)

#apply instead
result <- apply(pairs, 1, function(x) {
  mean(mat[, x[1]]) + mean(mat[, x[2]])
})

# view result
cbind(pairs, result)