函数内的消息(状态)不会立即显示在控制台中

时间:2012-06-04 11:22:27

标签: r message

我编写了一个函数,需要一些时间才能运行(由于巨大数据集上的1000+循环与预测模型测试相结合)。

要了解状态,在调用函数时,我在函数的for循环中使用message命令。问题是在功能完成后所有消息都显示在控制台中,而不是立即显示。所以它对我没有帮助:))

我试图在Stackoverflow上找到一个解决方案,但没有找到。我查看了问题“showing a status message in R”。在处理函数后,该主题中的所有答案和示例代码仍然只在控制台中提供文本而不是立即。

如何解决这个问题? R中可能有一个设置阻止在控制台中立即打印message文本吗?

注意:我在下面尝试过的示例,它们提供与我的函数相同的结果;在处理函数后显示文本。

example1(Joshua Ulrich):

for(i in 1:10) {
  Sys.sleep(0.2)
  # Dirk says using cat() like this is naughty ;-)
  #cat(i,"\r")
  # So you can use message() like this, thanks to Sharpie's
  # comment to use appendLF=FALSE.
  message(i,"\r",appendLF=FALSE)
  flush.console()
}

example2(Tyler):

test.message <- function() {
  for (i in 1:9){
    cat(i)
    Sys.sleep(1)
    cat("\b")
  }
}

编辑:第一个例子确实有效('flush console'是问题)...但是当我测试它时,我出于某种原因注释掉了flush控制台:S

3 个答案:

答案 0 :(得分:3)

test.message <- function() {
     for (i in 1:9){
       cat(paste(as.character(i),'\n'))
       flush.console()
       Sys.sleep(1)
     }
   }

类似于fotNelton的推荐。

编辑:ttmaccer很可能是正确的。我刚刚在Ubuntu服务器上进行了测试,代码无需刷新控制台即可运行。

答案 1 :(得分:1)

我似乎认为这可能是Windows特定的问题。在linux上或在cygwin shell中运行R时,可能不需要flush.console()。

答案 2 :(得分:0)

您可能有兴趣使用其中一个进度条功能(winProgressBartkProgressBartxtProgressBar)。 win版本仅适用于Windows,但win和tk版本的优势在于它们不会使输出混乱,而是打开另一个小窗口并在那里显示进度。

可以使用进度条显示循环进度,但可以使用label参数更新并显示其他详细信息。