web-dev-qa-db-fra.com

Comment afficher du texte dans la console R sans créer de nouvelles lignes?

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%...
48
DuckMaestro

Utilisez cat() au lieu de print():

cat("0%")
cat("..10%")

Les sorties:

0%..10%
53
Andrie

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 ..
9
Roman Luštrik

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]
8
agstudy

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.

5
Stephan Kolassa

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)
}
0
TPArrow