Можно ли создать текстовый журнал в вызове foreach ()% dopar% в R? - PullRequest
0 голосов
/ 17 апреля 2020

Я хочу записать определенные события в файл .txt в моем скрипте R. Часть сценария распараллелена. Можно ли регистрировать события с cat() или подобным внутри параллельной функции?

Это не работает.


chunks <- list(1:3, 4:6)

foreach(i = 1:cores) %:%
  foreach(x = chunks[[i]]) %dopar% {
    cat("Working on chunk, ", i, "number ", x, "...\n\n")
  }

Это работает, но это спецификация системы c (не идеально)

foreach(i = 1:cores, .packages = "glue") %:%
  foreach(x = chunks[[i]]) %dopar% {
    system(glue("echo 'Working on chunk {i}, number {x}' >> output.txt"))
  }

Пример вывода второго (рабочего) блока кода:

Working on chunk 1, number 1
Working on chunk 1, number 2
Working on chunk 1, number 3
Working on chunk 2, number 4
Working on chunk 2, number 6
Working on chunk 2, number 5

1 Ответ

1 голос
/ 18 апреля 2020

Вы можете использовать пакет doSNOW в R. Вы также можете указать файл, в котором вы хотите выводить логи. Надеюсь, что это работает для вас.

library(doSNOW)

cl <- makeCluster(2, outfile = "abc.out")
registerDoSNOW(cl)

chunks <- list(1:3, 4:6)

foreach(i = 1:2) %:%
  foreach(x = chunks[[i]]) %dopar% {
    cat("Working on chunk, ", i, "number ", x, "...\n\n")
    print("ongoing")
    # your statements
  }

stopCluster(cl)
...