2016-11-18 50 views
3

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

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) 
+1

从链接,你可以使用'pb < - txtProgressBar(min = 0,max = 600 0,style = 3);为(我在seq_len(6000)){<计算的东西在这里>; setTxtProgressBar(pb,i); };关闭(pb);' – lmo

+0

@lmo非常感谢你,它的工作原理! –

回答

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 
    progress=i 
    setWinProgressBar(progression, progress, title=paste(round(progress/6000)*100,"% done")) 
} 
+0

非常感谢。它运作良好。 –

3

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

或使用'cat(i,“..”,“\ n”)' – lmo

+0

你不应该养成使用'cat'作为消息的习惯。使用'消息'。 – Roland

+0

@lmo我找到这个链接https://ryouready.wordpress.com/2009/03/16/r-monitor-function-progress-with-a-progress-bar/非常有用。但是,我不知道如何将代码与我自己的功能结合起来。你能帮我解决这个问题吗?非常感谢。 –