做平行合并进度条和过程(do parallel combine progress bar and p

2019-09-27 09:26发布

我有问题,我想在平行和进度条的创建运行过程结合起来。

我对过程的代码是:

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)
}
}

我结合我的代码,并自带形成一个在这里

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

我想这其他代码:

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)
}
}

但是,我得到一个错误了。

Answer 1:

您正在尝试使用在某些情况下可能会奏效,但它不是一个好的解决办法。 我希望做的是建立在主过程中的进度条(外的foreach循环),然后具有foreach是进度条的任务返回的更新。 不幸的是,没有一个后端的支持。 这有可能是使用组合函数的技巧做,但只有当你使用支持呼吁即时,该组合功能的后端doParalleldoSNOWdoMC没有。 这些后端不叫相结合的飞行,因为他们使用的功能实现,例如clusterApplyLBmclapply不支持挂钩,使返回任务时要执行用户提供的代码。

因为我已经看到了,在进度条支持利益foreach ,我修改了doSNOW包添加特定doSNOW,“进步”选项的支持,我检查了代码到R-伪造网站。 它利用在一些较低级别的功能snow不幸没有被导出包parallel包。

如果你想尝试这项新功能,您将需要安装doSNOW从R-伪造。 我这样做是使用命令我的MacBook Pro:

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

这里是一个演示实验“陆侃”选项,一个简单的示例脚本:

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选项现在在doSNOW的CRAN上的最新版本。



文章来源: do parallel combine progress bar and process