r - 是否可以在 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
解决方案
您可以在 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)
推荐阅读
- javascript - 为什么这个密钥处理程序在没有警报的情况下不能工作?
- c - 如何将单链表更改为双向链表?
- java - 我没有执行任何操作,但仍然显示无法关闭连接,而事务仍处于活动状态
- javascript - 如何在 Javascript 中访问输入的值
- java - RxCamera 长宽比很奇怪
- javascript - 在数组的 .concat 上调用 .apply
- azure - TF14045: 找不到类型为“Microsoft.IdentityModel.Claims.ClaimsIdentity”的标识
- oracle-apex - 如何绕过登录以进行单元测试 Oracle APEX?
- c++ - C++ 中的迭代器开始/结束与 a:collection
- javascript - 单击按钮时是否可以跳过/忽略发送的特定选项值?