【问题标题】:How to show the progress of code in R?如何在 R 中显示代码的进度?
【发布时间】:2016-11-18 16:48:24
【问题描述】:

我现在正在处理一个大型数据集,某些函数可能需要数小时才能处理。我想知道如何通过进度条或数字(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)

【问题讨论】:

  • 从链接中,您可以使用pb &lt;- txtProgressBar(min = 0, max = 6000, style = 3); for(i in seq_len(6000)) {&lt;calculation stuff here&gt;; setTxtProgressBar(pb, i); }; close(pb);
  • @lmo 非常感谢,它有效!

标签: r progress-bar


【解决方案1】:

您可以添加一个 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..

【讨论】:

  • 或使用cat(i, "..", "\n")
  • 您不应该养成使用cat 发送消息的习惯。使用message
  • @lmo 我发现这个链接ryouready.wordpress.com/2009/03/16/… 非常有用。但是,我不知道如何将代码与我自己的函数结合起来。你能帮我解决这个问题吗?非常感谢。
  • @Roland 当我将cat 替换为message 时,输出是在一列中,你知道如何使输出连续吗?谢谢。
【解决方案2】:

这应该可行:

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

【讨论】:

  • 有什么方法可以在for循环函数之外使用这样的进度条?例如,ggplot() 调用或任何其他命令呢?当然,通常绘制事物的时间不应该超过一秒钟,但例如进行字典分析,您希望将字典应用于大量文本,而在我的情况下,这需要 2-3 小时。
  • 那么,有没有办法为quanteda::tokens_lookup() 或类似的东西添加进度条?
猜你喜欢
  • 1970-01-01
  • 2014-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-06
  • 2018-05-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多