Je voudrais sortir un indicateur de progression pendant mes longs algorithmes. Je peux facilement "bouillonner" une valeur de progression depuis mon algorithme (par exemple, en appelant un rappel de fonction fourni spécifiquement à cette fin), mais la difficulté réside dans le processus de sortie de texte proprement dit. Chaque appel à print
crée une nouvelle ligne, et chaque préfixe de [1]
.
Y a-t-il un moyen d’imprimer à différents moments, sans introduire de sauts de ligne?
Pour être concret, je veux réaliser une "animation" qui ressemblerait à ce qui suit si elle était observée à deux moments différents.
0%...
...
0%...2%...4%...
Utilisez cat()
au lieu de print()
:
cat("0%")
cat("..10%")
Les sorties:
0%..10%
Bah, Andrie m'a battu à 28 secondes.
> for (i in 1:10) {
+ cat(paste("..", i, ".."))
+ }
.. 1 .... 2 .... 3 .... 4 .... 5 .... 6 .... 7 .... 8 .... 9 .... 10 ..
Peut-être que vous pouvez yse plyr
l_ply(1:4,function(x) x+1,.progress= progress_text(char = '+'),.print=TRUE)
| | 0%[1] 2
|++++++ | 25%[1] 3
|+++++++++++++++ | 50%[1] 4
|++++++++++++++++++++++ | 75%[1] 5
|++++++++++++++++++++++++++++++++ | 100%[1]
Si vous avez vraiment besoin d'une barre de progression en tant que telle, utilisez txtProgressBar
pour la sortie de la console. Ou winProgressBar
sous Windows pour une barre de progression fenêtrée.
Je crois que vous cherchez \r
dans la fonction cat
comme ci-dessous:
for(i in 1:100) {
cat('\r',
i,
'% |',
rep('=', i / 4),
ifelse(i == 100, '|\n', '>'), sep = '')
Sys.sleep(.1)
}