给定一个矩阵(可以是非常大的维度),我如何有效地计算结果矩阵 d
,每个值定义为 d[i,j] = fun(x[ , c(i,j)])
对于一些给定的函数 fun
下面是一个例子
x = matrix(1:30, 5)
d = matrix(,ncol(x), ncol(x)) ## the output matrix
for(i in 1:ncol(x)) ## I use a for loop here, should find a more efficient way
for(j in 1:ncol(x))
d[i,j] = sum(apply(x[,c(i,j)], 1, min))
最佳答案
sapply
循环会稍微快一些
sapply(1:NCOL(x), function(i) sapply(1:NCOL(x), function(j){
sum(apply(x[, c(i, j)], 1, min))
}))
# [,1] [,2] [,3] [,4] [,5] [,6]
#[1,] 15 15 15 15 15 15
#[2,] 15 40 40 40 40 40
#[3,] 15 40 65 65 65 65
#[4,] 15 40 65 90 90 90
#[5,] 15 40 65 90 115 115
#[6,] 15 40 65 90 115 140
关于r - 将函数应用于所有行(或列)对的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57616017/