R Sys.sleep 打印在 while 循环中不起作用
Posted
技术标签:
【中文标题】R Sys.sleep 打印在 while 循环中不起作用【英文标题】:R Sys.sleep with print not working in while loops 【发布时间】:2014-12-25 22:06:22 【问题描述】:我发现了一个(可能是已知的)问题。当您尝试在 while 循环中使用 Sys.sleep 时,它不起作用。具体来说,它要么等待所有组合的睡眠,然后一次打印所有内容,要么短时间运行。
示例代码:
i1 <- 0
while (i1 < 3)
i1 <- i1 + 1
print(1)
Sys.sleep(1)
print(2)
Sys.sleep(1)
print(3)
Sys.sleep(1)
print("GO!")
有任何想法、解决方法或解决方案吗? (除了不使用循环......)
谢谢!
【问题讨论】:
为我工作。发布您的会话信息?另外,你能更描述一下“短跑”吗? “短脉冲”是指它将运行 3 或 4 行代码 - 然后等待 3 或 4 秒,然后运行接下来的 3 或 4 秒,等等。与打印 1 行相反,等待1 秒,打印下一行等。 我怀疑您的标准输出正在被缓冲,只是稍后才打印出来。要测试该理论,您可以先使用op <- options(digits.secs = 6)
然后print(Sys.time())
而不是print(1)
、print(2)
等。也许最后所有内容都会同时打印,但时间戳将相隔一秒。
您可能需要在某些 GUI/操作系统上刷新控制台。见?flush.console
。
@flodel 你是对的,时间戳相隔 1 秒 - 即使实际显示不是。 Gavin Simpson 我尝试了 flush.console() 并没有改变任何东西。还重新启动了 R 以防万一 - 没有变化。
【参考方案1】:
在 R 的 Windows 和 OS X GUI 上,您需要使用 flush.console()
来避免您描述的行为:
i1 <- 0
while (i1 < 3)
i1 <- i1 + 1
print(1); flush.console()
Sys.sleep(1)
print(2); flush.console()
Sys.sleep(1)
print(3); flush.console()
Sys.sleep(1)
print("GO!"); flush.console()
【讨论】:
谢谢!这完美地工作。还要感谢最初建议这条路线的 Gavin - 我只是没有正确实施它。 我尝试使用循环检查文件,直到整个循环完成,但连接听起来不稳定。 i.imgur.com/VCIMIvA.jpg以上是关于R Sys.sleep 打印在 while 循环中不起作用的主要内容,如果未能解决你的问题,请参考以下文章
while循环保持打印和重复,我的getch出了什么问题? [重复]