我正在使用带有 %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 中有这样的可能吗?
最佳答案
比方说,不是尝试 1000 次,而是尝试 10000 次,我会像这样分解它,使用 part_num 来区分大小为 500 的 block
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 = ''))
}
关于r - 将结果写入foreach循环R内的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31275560/