全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
3729 0
2017-05-06
说在前面

在用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))  t
  kconfigure(pb1, value = index - 1)  
  Sys.sleep(1)
}

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群