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 &lt;- 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出了什么问题? [重复]

如何让R执行暂停,休眠,等待X秒?

如何在while循环中只打印一次帖子?

如何在html textarea中打印javascript while循环结果?

R中的并行while循环

java 用while循环打印n行星号组成的等腰三角形