2015-10-20 35 views
0

我需要顯示循環內各種變量的變化值(以跟蹤我的分配算法正在做什麼;數據集太大,無法每次都等待輸出以確定行爲是否合意)。如何在不清除控制檯的情況下顯示更新的輸出?

目前我使用以下邏輯...

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

爲什麼你使用'while'循環時,你應該使用'for'循環? – Roland

+0

@Roland沒有特別的理由,除了較長的代碼之外,是否有區別? – Gaurav

+0

這是非常不尋常的,並且可讀性稍差(當然,編寫起來不太方便)。自從一年多以來,我沒有在R中使用過「while」循環。 (如果我真的需要一個,我可能會轉向Rcpp。) – Roland

回答

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} 
+2

或者,'%2i'將避免前導零並仍然解決問題。 – Roland

相關問題