2015-07-07 2 views
1

Я использую пакет foreach с% dopar% для реализации набора симуляций. Структура моделирования иллюстрируется этой простой версии:Запись результатов в файл внутри цикла foreach R

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

говорят, вместо 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 = '')) 
} 
Смежные вопросы