【问题标题】:do parallel combine progress bar and process并行合并进度条和进程
【发布时间】:2015-03-29 02:56:51
【问题描述】:

我在将要并行运行的进程与进度条的创建结合起来时遇到问题。

我的流程代码是:

pred_pnn <- function(x, nn){
  xlst <- split(x, 1:nrow(x))
  pred <- foreach(i = xlst,.packages = c('tcltk', 'foreach'), .combine = rbind) 
  %dopar% 
{ mypb <- tkProgressBar(title = "R progress bar", label = "",
                        min = 0, max = max(jSeq), initial = 0, width = 300)
  foreach(j = jSeq) %do% {Sys.sleep(.1)
  setTkProgressBar(mypb, j, title = "pb", label = NULL)
  }  
  library(pnn)
 data.frame(prob = guess(nn, as.matrix(i))$probabilities[1], row.names = NULL)
}
}

我将我的代码和来自 here 的代码组合在一起

但没有编译。我得到一个语法错误,但我找不到它。

我尝试了其他代码:

pred_pnn <- function(x, nn){
  xlst <- split(x, 1:nrow(x))
  pred <- foreach(i = xlst, .combine = rbind) %dopar% 
{library(pnn)
 cat(i, '\n')
 data.frame(prob = guess(nn, as.matrix(i))$probabilities[1], row.names = NULL)
}
}

但我也遇到了错误。

【问题讨论】:

    标签: r function parallel-processing progress-bar


    【解决方案1】:

    您尝试使用的方法在某些情况下可能有效,但这不是一个好的通用解决方案。我想要做的是在主进程中创建一个进度条(在foreach 循环之外),然后在返回任务时让foreach 更新该进度条。不幸的是,没有一个后端支持这一点。使用组合函数技巧可以做到这一点,但前提是您使用的后端支持即时调用组合函数,doParalleldoSNOWdoMC 不支持。这些后端不会即时调用 combine,因为它们是使用诸如 clusterApplyLBmclapply 之类的函数实现的,这些函数不支持允许在返回任务时执行用户提供的代码的钩子。

    因为我在foreach 中看到了对进度条支持的兴趣,所以我修改了doSNOW 包以添加对特定于doSNOW 的“进度”选项的支持,并将代码签入R-Forge 网站。它利用了snow 包中的一些较低级别的函数,不幸的是,parallel 包没有导出这些函数。

    如果您想试用这个新功能,您需要从 R-Forge 安装 doSNOW。我在 MacBook Pro 上使用以下命令执行此操作:

    install.packages("doSNOW", repos="http://R-Forge.R-project.org", type="source")
    

    这是一个简单的示例脚本,演示了实验性“progess”选项:

    library(doSNOW)
    library(tcltk)
    cl <- makeSOCKcluster(3)
    registerDoSNOW(cl)
    pb <- tkProgressBar(max=100)
    progress <- function(n) setTkProgressBar(pb, n)
    opts <- list(progress=progress)
    r <- foreach(i=1:100, .options.snow=opts) %dopar% {
      Sys.sleep(1)
      sqrt(i)
    }
    

    更新

    progress 选项现在可用于 CRAN 上最新版本的 doSNOW。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多