楼主: chenjinjian
3728 0

[学习分享] 监控R语言程序的运行进度 [推广有奖]

  • 0关注
  • 6粉丝

已卖:2368份资源

博士生

72%

还不是VIP/贵宾

-

威望
0
论坛币
31864 个
通用积分
514.4004
学术水平
27 点
热心指数
26 点
信用等级
23 点
经验
7839 点
帖子
61
精华
1
在线时间
440 小时
注册时间
2017-4-9
最后登录
2024-7-30

楼主
chenjinjian 学生认证  发表于 2017-5-6 11:12:19 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
说在前面

在用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)
}

二维码

扫码加我 拉你入群

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

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

关键词:运行进度

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-3-6 05:29