在R中使用doParallel时在worker的主机上分配文件路径

时间:2018-02-05 21:43:00

标签: r doparallel

我正在使用8核的单台机器。我想使用makeCluster

中的outfile选项将stdout和stderr记录在日志文件中
cl = makeCluster(detectCores() - 1,      
                 outfile = "log.txt")

以上代码将日志文件保存在工作目录中。我想知道如何更改outfile的文件路径以保存在任何给定的路径中。 E.g:

cl = makeCluster(detectCores() - 1,     
                 outfile = "\\\\logfolder\\log.txt")

当我指定文件路径时,我没有得到任何日志文件(既不在工作目录中也不在指定路径中)。 文档说明我需要更改worker的主机上的文件路径。

outfile: 从工作者那里引导stdout和stderr连接输出的位置。 “”表示没有重定向(这可能仅对本地计算机上的工作人员有用)。默认为/ dev / null(nul:在Windows上)。另一种可能性是工作者主机上的文件路径。文件将以追加模式打开,因为所有工作人员都会登录到同一个文件。

老实说,我对并行计算术语不是很了解,并且想知道你是否可以帮我改变文件路径。谢谢!

1 个答案:

答案 0 :(得分:1)

这对我来说可以在虚拟路径中生成10个单独的文件 - C:/temp/temp/基于i。您可以尝试类似的方法。

library(parallel)
cl <- makeCluster(detectCores()-1)

parallel_sink <- function(out) {
    O <- file(out, "w")
    sink(O)
    return(O)
}

clusterExport(cl, c("parallel_sink"))

parLapply(
    cl, 
    1:10, 
    function(i) {
        out <- paste0("C:/temp/temp/", i, ".txt")
        worker_out <- parallel_sink(out)
        write(paste0("prints to stdout - ", i), stdout())
        close(worker_out)   
    }
)
stopCluster(cl)
rm(cl)