我想做一个排列测试,这是代码的结构(带有虚拟数据)。排列将并行运行,并希望计算生成的矩阵有多少次未通过测试。(见代码块 2)。但这在块 2 中很慢,因为它在单个处理器中工作。我想编写一个 .combine 函数与 foreach() 函数一起使用,但我不知道如何提供输入参数(cc 和矩阵)
library(foreach)
library(parallel)
#matrix to be populated
cc<-matrix(0,nrow = 10,ncol = 10)
#fixed matrix
a<-matrix(runif(100), ncol=10)
iters<-1e3
cl<-makeCluster(8)
registerDoParallel(cl)
ls<-foreach(icount(iters)) %dopar% {
#generated matrix
b<-matrix(runif(100), ncol=10)
b
}
stopCluster(cl)
这部分是问题所在。我想计算矩阵 b 的每个元素比固定矩阵 a 大多少次,并将每个元素的计数添加到 cc 矩阵。如果我可以定义一个 .combine 函数,这应该在生成每个矩阵时执行。
for(b in ls){
for(i in 1:dim(a)[1]) {
for(j in 1:dim(a)[2]) {
if(a[i,j] < b[i,j]) cc[i,j]=cc[i,j] + 1
}
}
}
cc