如何在R中显示代码的进度?

qv7cva1a  于 2023-06-19  发布在  其他
关注(0)|答案(3)|浏览(197)

我现在正在处理一个大型数据集,一些函数可能需要几个小时才能处理。我想知道如何通过进度条或数字(1,2,3,...,100)显示代码的进度。这里有一个例子。谢谢

require(Kendall)
mydata=matrix(rnorm(6000*300),ncol = 300)
result=as.data.frame(matrix(nrow = 6000,ncol = 2))
for (i in 1:6000) {
  abc=MannKendall(mydata[i,])
  result[i,1]=abc$tau
  result[i,2]=abc$sl
}

顺便说一句,我发现链接https://ryouready.wordpress.com/2009/03/16/r-monitor-function-progress-with-a-progress-bar/非常有用。但是,我不知道如何将链接中的代码与我自己的函数结合起来。有人有主意吗?谢谢。这是上面链接的代码。

total <- 20
# create progress bar
pb <- txtProgressBar(min = 0, max = total, style = 3)
for(i in 1:total){
   Sys.sleep(0.1)
   # update progress bar
   setTxtProgressBar(pb, i)
}
close(pb)
mwngjboj

mwngjboj1#

您可以添加一个if语句以每100次迭代输出一次

for (i in 1:6000) {
  abc=MannKendall(mydata[i,])
  result[i,1]=abc$tau
  result[i,2]=abc$sl
  if(i %% 100 == 0){
    cat(i)
    cat("..")
  }
}

这会给你输出

100..200..300..400..
woobm2wo

woobm2wo2#

这应该可以工作:

mydata=matrix(rnorm(6000*300),ncol = 300)
result=as.data.frame(matrix(nrow = 6000,ncol = 2))
progression<-winProgressBar(title = "Progress bar", min = 0,max = 6000 , width = 300)
for (i in 1:6000) {
  abc=MannKendall(mydata[i,])
  result[i,1]=abc$tau
  result[i,2]=abc$sl
  setWinProgressBar(progression, i, title=paste(round(progress/6000)*100,"% done"))
}
ct3nt3jp

ct3nt3jp3#

如果在一个长的/多个脚本上有很多函数同时运行,我会使用print语句。它还有助于缩小一次运行所有代码时出错的地方。

print("Now running section 1")

*some code*

print("Now running section 2")

*some more code*

在一个函数中,我会使用MeetMrMet的答案

相关问题