我需要在循环中显示各种变量的变化值(以跟踪我的分配算法正在做什么;数据集太大,无法每次等待输出以确定行为是否合乎需要)。
目前我使用以下逻辑......
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)))
,但每次都会清除整个控制台,这是另一个问题。
有没有办法清除显示行而不清除控制台而不仅仅是覆盖?这是我正在做的一个较小的版本,当使用大尺寸的多个数字进行显示时,它会变得非常混乱。
答案 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}