Подтвердить что ты не робот

Как выводить текст в консоли R без создания новых строк?

Я хочу вывести индикатор прогресса во время моих длительных алгоритмов работы. Я могу легко "выкрутить" значение прогресса из моего алгоритма (например, посредством вызова функции обратного вызова функции специально для этой цели), но сложность заключается в фактическом процессе вывода текста. Каждый вызов print создает новую строку и каждый префикс [1].

Есть ли способ печати в разные моменты времени, без введения разрывов строк?

Чтобы быть конкретным, я хочу добиться "анимации", которая будет выглядеть следующим образом, если будет наблюдаться в два разных раза.

0%...

...

0%...2%...4%...
4b9b3361

Ответ 1

Используйте cat() вместо print():

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

Выходы:

0%..10%

Ответ 2

Ба, Андри избил меня до 28 секунд.

> for (i in 1:10) {
+ cat(paste("..", i, ".."))
+ }
.. 1 .... 2 .... 3 .... 4 .... 5 .... 6 .... 7 .... 8 .... 9 .... 10 ..

Ответ 3

Возможно, вы можете 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]

Ответ 4

Если вам действительно нужен индикатор выполнения как таковой, используйте txtProgressBar для вывода консоли. Или winProgressBar под Windows для оконной строки выполнения.

Ответ 5

Я считаю, что вы ищете \r в функции cat как показано ниже:

for(i in 1:100) {
    cat('\r',
            i,
            '% |',
            rep('=', i / 4),
            ifelse(i == 100, '|\n',  '>'), sep = '')
    Sys.sleep(.5)
}