如何在不清除控制台的情况下显示更新的输出

时间:2015-10-20 10:37:12

标签: r

我需要在循环中显示各种变量的变化值(以跟踪我的分配算法正在做什么;数据集太大,无法每次等待输出以确定行为是否合乎需要)。

目前我使用以下逻辑......

i <- 90
while (i < 105) {
cat("\r", paste("count value = ",as.character(i %% 99)))
Sys.sleep(0.25)
i <- i + 1}

这会将输出显示为...

count value =  11

问题是上面的代码只会覆盖显示的输出。所以当我们到达i = 101时,显示屏显示......

count value =  28

而不是......

count value =  2

...最后一位数字8是先前显示的输出的剩余部分。

该命令仅覆盖显示。

可以使用

cat("\014", paste("count value = ",as.character(i %% 99))),但每次都会清除整个控制台,这是另一个问题。

有没有办法清除显示行而不清除控制台而不仅仅是覆盖?这是我正在做的一个较小的版本,当使用大尺寸的多个数字进行显示时,它会变得非常混乱。

1 个答案:

答案 0 :(得分:2)

您可以考虑在写入控制台之前格式化您的数字,因为前导零将解决您的问题。

i <- 1
while (i < 100000) {
  cat("\r",sprintf("count value = %02d",i %% 99))
  Sys.sleep(0.25)
  i <- i + 1}

另一种解决方案可能是先在控制台上写下很多空格:

i <- 1
while (i < 100000) {
  cat("\r", paste(rep(" ",20)))
  cat("\r", paste("count value = ",as.character(i %% 99)))
  Sys.sleep(0.25)
  i <- i + 1}