r语言 - 并行化列成对矩阵比较



对于名为db.mtx.rnk的给定矩阵,我正在计算列成对肯德尔和斯皮尔曼相关性并将结果保存到平方矩阵中。问题是输入矩阵非常大(~5000x5000(,并且成对组合的数量太多,需要很长时间才能执行。将时间减少一半的一种选择是只计算上三角形,我还没有实现它,但仍然会很慢。我想并行化以获得结果。有什么提示吗?

当前代码:

# -- get pairwise column combinations
pairwise.permuts <- t(expand.grid(1:ncol(db.mtx.rnk), 1:ncol(db.mtx.rnk)))
# -- iterate over two stats of interest   
for(stat in c("kendall", "spearman")){
# -- kendall tau and spearman 
stats.vec <- apply(pairwise.permuts, 2, function(x) cor(db.mtx.rnk[,x[1]], db.mtx.rnk[,x[2]], method = stat))
stats.mtx <- matrix(stats.vec, ncol = ncol(db.mtx.rnk))
colnames(stats.mtx) <- colnames(db.mtx.rnk)
rownames(stats.mtx) <- colnames(db.mtx.rnk)
}

谢谢

在 R 中并行化有很多不同的可能性。一些选项是parallelforeachfuture。根据您的代码,您必须对基于future的包进行最少的更改future.apply因为它提供了函数future_apply。您必须使用plan(multiprocess)来告诉future应该并行计算它。multiprocess使用不同的 R 会话或分叉,具体取决于操作系统。这导致了代码(并且已经加快了我机器上的玩具示例(:

library(future.apply)
plan(multiprocess)
for(stat in c("kendall", "spearman")){
# -- kendall tau and spearman 
stats.vec <- future_apply(pairwise.permuts, 2, function(x) cor(db.mtx.rnk[,x[1]], db.mtx.rnk[,x[2]], method = stat))
stats.mtx <- matrix(stats.vec, ncol = ncol(db.mtx.rnk))
colnames(stats.mtx) <- colnames(db.mtx.rnk)
rownames(stats.mtx) <- colnames(db.mtx.rnk)
}

最新更新