3

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

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

我试图在 Stackoverflow 上找到解决方案,但没有找到。例如,我查看了“在 R 中显示状态消息”这个问题。在处理函数后,该主题中的所有答案和示例代码仍然只给我控制台中的文本,而不是立即给我。

如何解决这个问题?R 中是否存在阻止message在控制台中立即打印文本的设置?

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

示例 1(约书亚·乌尔里希):

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()
}

示例 2(泰勒):

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

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

4

3 回答 3

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

这类似于 fotNelton 的推荐。

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

于 2012-06-04T11:57:05.290 回答
1

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

于 2012-06-04T15:05:53.453 回答
0

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

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

于 2012-06-04T15:52:44.250 回答