我有一个循环,每次迭代需要很长时间,我希望实时看到它的进展.当循环运行时,如何实时将for循环中的变量打印到控制台?在循环结束后,每个都打印出来,这对我来说没用:
for(i in 1:10){
write(i,stdout())
}
for(i in 1:10){
write(i,stderr())
}
for(i in 1:10){
print(i)
}
1
2
3
4
5
6
7
8
9
10
Run Code Online (Sandbox Code Playgroud)
Jou*_*ske 18
最后一个实时打印,尝试这样:
for(i in 1:10){
Sys.sleep(0.1)
print(i)
}
Run Code Online (Sandbox Code Playgroud)
这在Rstudio中看起来很好,但是在经典的Rgui中你必须单击控制台才能刷新它(例如通过Sys.sleep(0.5)帮助看到它来增加睡眠).您可以通过使用flush.console清除缓冲区来避免这种情况:
for(i in 1:10){
Sys.sleep(0.1)
print(i)
flush.console()
}
Run Code Online (Sandbox Code Playgroud)
或者在Windows中,您可以Misc在上方工具栏中选择并取消选中buffered output.
如果你的目标是跟踪你的循环过程,那么当你经历大量的迭代时,上面的方法感觉有点麻烦(至少在我看来).在这种情况下,使用进度条可能更好:
n<- 1000
pb <- txtProgressBar(min = 0, max = n, style = 3) #text based bar
for(i in 1:n){
Sys.sleep(0.001)
setTxtProgressBar(pb, i)
}
close(pb)
Run Code Online (Sandbox Code Playgroud)
或者甚至更好的东西:
library(tcltk)
n<- 1000
pb <- tkProgressBar(title = "Doing something", min = 0, max = n, width = 200)
for(i in 1:n){
Sys.sleep(0.001)
setTkProgressBar(pb, i, label=paste(round(i/n*100,1),"% done"))
}
close(pb)
Run Code Online (Sandbox Code Playgroud)