сохранить частичные результаты в цикле foreach в R

Я хочу знать, сколько циклов было выполнено, и сохранить результаты каждого законченного цикла, но функция assign и cat не работают.

library(doParallel)
library(foreach)
library(Matrix)

rm(list=ls())


cl=makeCluster(2)
registerDoParallel(cl)

  sink("report.txt")
result=foreach (n=1:10,.packages="Matrix" )%dopar%{
  variable <-sparseMatrix(dims = c(100,150), i={1}, j={1},x=0)


  cat(sprintf("tastk %d is complete \n",n),append=TRUE)
  assign(paste("variable",n,sep=""),variable)
  return(variable)

} 

sink()

person LauC    schedule 02.10.2018    source источник
comment
Возможный дубликат Как я могу `print` или `cat`, когда используя параллель   -  person F. Privé    schedule 02.10.2018
comment
Я пытался, но после реализации cl=makeCluster(20,outfile=report.txt) когда я открываю отчет во время цикла, записывается любая строка.   -  person LauC    schedule 02.10.2018
comment
Мой ответ работает для вас?   -  person F. Privé    schedule 05.10.2018
comment
не совсем, переменная не создается и пишет в текстовый файл когда хочет. Я думаю, что-то связано с оперативной памятью, но я не знаю, как с ней справиться.   -  person LauC    schedule 05.10.2018


Ответы (1)


Это отлично работает на моем компьютере с Linux:

library(doParallel)
library(foreach)
library(Matrix)

rm(list=ls())


cl=makeCluster(2, outfile = "report.txt")
registerDoParallel(cl)

result=foreach (n=1:10,.packages="Matrix" )%dopar%{

  variable <-sparseMatrix(dims = c(100,150), i={1}, j={1},x=0)      

  cat(sprintf("task %d is complete \n",n))
  assign(paste("variable",n,sep=""),variable)
  return(variable)

} 

stopCluster(cl)
person F. Privé    schedule 03.10.2018