如何在R中显示并行计算中的代码进度?

如何在R中显示并行计算中的代码进度?,r,parallel-processing,progress-bar,R,Parallel Processing,Progress Bar,我现在处理的是一个大数据集,一些函数可能需要几个小时才能处理。我想知道如何通过进度条或数字(1,2,3,…,100)显示代码的进度。我想将结果存储为一个包含两列的数据框。这里有一个例子。谢谢 require(foreach) require(doParallel) require(Kendall) cores=detectCores() cl <- makeCluster(cores-1) registerDoParallel(cl) mydata=matrix(rnorm(8000*

我现在处理的是一个大数据集,一些函数可能需要几个小时才能处理。我想知道如何通过进度条或数字(1,2,3,…,100)显示代码的进度。我想将结果存储为一个包含两列的数据框。这里有一个例子。谢谢

require(foreach)
require(doParallel)
require(Kendall)

cores=detectCores()
cl <- makeCluster(cores-1)
registerDoParallel(cl)

mydata=matrix(rnorm(8000*500),ncol = 500)
result=as.data.frame(matrix(nrow = 8000,ncol = 2))
pb <- txtProgressBar(min = 1, max = 8000, style = 3)

foreach(i=1:8000,.packages = "Kendall",.combine = rbind) %dopar%         
{
  abc=MannKendall(mydata[i,])
  result[i,1]=abc$tau
  result[i,2]=abc$sl
  setTxtProgressBar(pb, i)
}
close(pb)
stopCluster(cl)
require(foreach)
要求(双平行)
要求(肯德尔)
核心=检测核心()

cldoSNOW包支持进度条,而doParallel不支持进度条。下面是一种在示例中添加进度条的方法:

require(doSNOW)
require(Kendall)
cores <- parallel::detectCores()
cl <- makeSOCKcluster(cores)
registerDoSNOW(cl)
mydata <- matrix(rnorm(8000*500), ncol=500)
pb <- txtProgressBar(min=1, max=8000, style=3)
progress <- function(n) setTxtProgressBar(pb, n)
opts <- list(progress=progress)
result <- 
  foreach(i=1:8000, .packages="Kendall", .options.snow=opts,
          .combine='rbind') %dopar% {
    abc <- MannKendall(mydata[i,])
    data.frame(tau=abc$tau, sl=abc$sl)
  }
close(pb)
stopCluster(cl)
require(doSNOW)
要求(肯德尔)
核心我认为这个软件包也能起作用

require(parallel)
require(pbapply)

mydata=matrix(rnorm(8000*500),ncol = 500)

cores=detectCores()
cl <- makeCluster(cores-1)
parallel::clusterExport(cl= cl,varlist = c("mydata"))
parallel::clusterEvalQ(cl= cl,library(Kendall))

result = pblapply(cl = cl,
         X = 1:8000,
         FUN = function(i){
  abc=MannKendall(mydata[i,])
  result = as.data.frame(matrix(nrow = 1,ncol = 2))
  result[1,1]=abc$tau
  result[1,2]=abc$sl
  return(result)
})

result = dplyr::bind_rows(result)
stopCluster(cl)
require(并行)
要求(pbapply)
mydata=矩阵(rnorm(8000*500),ncol=500)
核心=检测核心()

嗨,我有一个关于并行工作的新问题,不知你能否帮我。链接非常感谢。