如何将foreach%dopar%日志写入单独的文件

时间:2019-03-28 09:20:11

标签: r foreach doparallel

我使用R运行蚁群优化,通常重复几次相同的优化来交叉验证我的结果。我想通过与foreachdoParallel软件包并行运行进程来节省时间。

我的代码的可复制示例将很长,因此我希望这足够了。我想我设法使代码像这样运行:

result <- list()

short <- function(n){
            for(n in 1:10){
               result[[n]] <- ACO(data, ...)}}

foreach(n=1:50) %dopar% short(n)

在ACO()函数中,我连续创建具有中间结果(例如当前信息素水平)的对象,并使用write.table(..., append=TRUE)保存该对象,以跟踪迭代及其结果。现在,我正在并行运行这些进程,我编写的文件包含所有进程的结果,而我无法确定数据属于哪个进程。因此,我想为每个进程编写不同的文件。

通常,使用并行处理保存中间结果的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

您可以使用log4r包将所需信息写入日志文件。有关软件包here的更多信息。

您必须在short函数中放入的代码示例:

# Import the log4r package. 
library('log4r')
# Create a new logger object with create.logger(). 
logger <- create.logger()
# Set the logger's file output. 
logfile(logger) <- 'base.log'
# Set the current level of the logger. 
level(logger) <- 'INFO'
# Try logging messages with different priorities. # At priority level INFO, a call to debug() won't print anything. 
debug(logger, 'Iretation and result info')