我正在使用带有%dopar%的foreach包来实现一组模拟。这个简单的版本说明了模拟的结构:
library(foreach)
library(doMC)
registerDoMC(4)
id.list <- c(1:3000)
results <- foreach(i=1:1000,.combine=rbind) %dopar% {
## Randomly draw 100 donor pool units and 1 treated unit
v1 <- sample(id.list, 1, replace = FALSE)
v2 <- sample(id.list, 1, replace = FALSE)
v3 <- sample(id.list, 1, replace = FALSE)
v4 <- sample(id.list, 1, replace = FALSE)
c(i,v1,v2,v3,v4)
}
我想在循环仍在运行时将此循环的结果写入.csv文件或类似的东西。例如,当循环达到迭代500时,我想将前500行写入.csv。
或者,当我遇到迭代500时,我会打开循环,同时提取前500行结果。
在foreach中是否有可能这样的事情?
答案 0 :(得分:0)
说,而不是1000个trys,你要去10000,我会像这样分解它,使用part_num来区分大小为500的块
library(foreach)
library(doMC)
registerDoMC(4)
id.list <- c(1:3000)
for(part_num in 1:20){
results <- foreach(i=1:500,.combine=rbind) %dopar% {
## Randomly draw 100 donor pool units and 1 treated unit
v1 <- sample(id.list, 1, replace = FALSE)
v2 <- sample(id.list, 1, replace = FALSE)
v3 <- sample(id.list, 1, replace = FALSE)
v4 <- sample(id.list, 1, replace = FALSE)
c(i,v1,v2,v3,v4)
}
write.csv(results, file = paste('part', part_num, '.csv', sep = ''))
}