您可以在下面找到 R 中的一段代码,我想将其转换为使用多个 CPU 作为并行进程运行。我尝试使用foreach包,但没有走远.. 鉴于我有 3 级嵌套循环,我找不到一个很好的例子如何使它工作。帮助将不胜感激。下面的代码示例 - 我制作了一个简单的函数,因此可以作为示例:
celnum <- c(10,20,30)
t2 <- c(1,2,3)
allrepeat <- 10
samplefunction <- function(celnum,t2){
        x <- rnorm(100,celnum,t2)
        y = sample(x, 1)
        z = sample(x,1)
        result = y+z
        result 
}
常规方式获取结果:
z_grid <- matrix(, nrow = length(celnum), ncol = length(t2))
repetitions <- matrix(, nrow = allrepeat, ncol = 1)
set.seed=20
for(i in 1:length(celnum)){
        for (j in 1:length(t2)){
                for (k in 1:allrepeat) {
                        results <- samplefunction(celnum[i],t2[j]) 
                                repetitions[k] <- results
                                z_grid[i,j] <- mean(repetitions,na.rm=TRUE) 
                }  
        }
}
z_grid
现在尝试使用 foreach 做同样的事情:
set.seed=20
library(foreach)
library(doSNOW)
cl <- makeCluster(3, type = "SOCK")
registerDoSNOW(cl)
set.seed=20
output <- foreach(i=1:length(celnum),.combine='cbind' ) %:% 
        foreach (j=1:length(t2), .combine='c') %:%   
                foreach (k = 1:allrepeat) %do% {
                        mean(samplefunction(celnum[i],t2[j]) )
}  
output
这不像我想要的那样工作,因为它返回一个 30x2 维度的矩阵而不是 3x3。我的目的是模拟 i 和 j 组合 k 次的场景,并希望获得 i 和 j 的每个组合的这些 k 模拟的平均值。