您可以在下面找到 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 模拟的平均值。