Вывести выходные данные в цикле foreach в R - PullRequest
0 голосов
/ 05 июня 2018

Я пытался отобразить некоторые выходные данные из цикла foreach R. Воспроизводимый пример:

cl <- makeCluster(2)
registerDoParallel(cl)


ptm1 <- proc.time()
foreach (i = 1:50, .packages = c("MASS"), .combine='+') %dopar% {
  ginv(matrix(rexp(1000000, rate=.001), ncol=1000))
  if (i >49){
    cat("Time taken", proc.time() - ptm1)
  }
}

Я ожидаю, что отображаемое время будет отображаться.Но это ничего не отображает.Можете ли вы предложить способы захвата сообщений в цикле foreach и отображения в конце цикла.

1 Ответ

0 голосов
/ 05 июня 2018

Я не уверен, есть ли способ вывода на экран, но вы можете легко вывести его в файл журнала, используя функцию sink, например, так:

ptm1 <- proc.time()
foreach (i = 1:50, .packages = c("MASS"), .combine='+') %dopar% {
  ginv(matrix(rexp(1000000, rate=.001), ncol=1000))
  if (i >49){

    sink("Report.txt", append=TRUE) #open sink file and add output

    cat("Time taken", proc.time() - ptm1)

  }
}

РЕДАКТИРОВАТЬ: Как указывает @Roland, это может быть опасно, если вы хотите захватывать выходные данные с каждой итерации, а не только с последней, потому что вы не хотите, чтобы рабочие забивали друг друга.Он ссылается на лучшую альтернативу для этого сценария в своем комментарии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...