首页 > 解决方案 > 是否可以在 R 中的 foreach() %dopar% 调用中创建文本日志?

问题描述

我想将某些事件记录到我的 R 脚本中的 .txt 文件中。部分脚本是并行的。是否可以在并行化函数中记录事件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")
  }

这可行,但它是系统特定的(不理想)

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

标签: rforeachdoparallel

解决方案


您可以在 R 中使用 doSNOW 包。您也可以指定要输出日志的文件。希望这对你有用。

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)

推荐阅读