绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
【效率提升】监控R语言程序的运行进度
2020-06-17 14:12:34

说在前面

在用R语言做数据分析处理的过程中,我们经常会碰到一些数据量比较大进而导致循环执行好久的情况。等待的过程太煎熬了,关键的是我们不知道现在已经完成了多少进度,从而决定是否停止重新修改代码。

有人建议我们可以用cat函数来不断进行打印实现这一目的,然而再某些循环中,所有的cat语句输出结果会在所有代码运行完成之后才会显示,而不是我们期望的一次循环即是输出一条cat语句。

tcltk包

所以我们就必须借助的R包来实现这个功能。一些论坛上的文章介绍了tcltk这个包,其中有一个函数tkProgressBar便可以帮助我们做到这一点。具体代码如下:

library(tcltk)  
u <- 1:2000  
  
#开启进度条  
  
pb <- tkProgressBar("进度","已完成 %", 0, 100)  
  
for(i in u) {  
   info<- sprintf("已完成 %d%%", round(i*100/length(u)))  
   setTkProgressBar(pb, i*100/length(u), sprintf("进度 (%s)", info),info)  
}     

#关闭进度条  
close(pb)  

我们可以看到使用方法非常简单,首先加载tcltk包并用tkProgressBar开启进度条。其中我们这个例子中,title属性为“进度”,label是“已完成 %”,而0和100则分别代表小进度和大进度的值,之后我们用一个循环来测试这个进度条函数的功能,其中info表面不同时刻进度条打印的信息,setTkProgressBar则可以对我们之前创建的progressBar进行设置。

整段代码比较简单,大家再循环里可以直接拷贝,不会影响其他的函数运行,其效果大致是如下图所示:


tcltk2包

目前,还有一个新的包,叫做tcltk2,也可以是实现上述的功能,具体测试代码如下。可以更详细的设置进度栏的大小等属性值:

library(tcltk)
library(tcltk2)

root <- tktoplevel()

l1 <- tk2label(root)
pb1 <- tk2progress(root, length = 300)
tkconfigure(pb1, value = 0, maximum = 9)

tkgrid(l1, row = 0)
tkgrid(pb1, row = 1)

for (index in 1:10){
  tkconfigure(l1, text = paste("Index", index))
  tkconfigure(pb1, value = index - 1)
  Sys.sleep(1)
}

说在后面

更多内容请关注我的专栏:R语言与数据挖掘 - 知乎专栏

或者关注我的知乎账号:温如

对量化交易(投资)感兴趣的也可以关注专栏:清华大学量化投资协会成果集萃 - 知乎专栏

分享好友

分享这个小栈给你的朋友们,一起进步吧。

R语言
创建时间:2020-06-15 11:46:51
R是用于统计分析、绘图的语言和操作环境。R是属于GNU系统的一个自由、免费、源代码开放的软件,它是一个用于统计计算和统计制图的工具。
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

技术专家

查看更多
  • 小雨滴
    专家
戳我,来吐槽~