我想进行排列测试,这是代码的结构(带有虚拟数据)。排列将并行运行,并希望计算生成的矩阵未通过测试的次数。 (见代码区块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
答案 0 :(得分:1)