Ответ 1
Используйте cat()
вместо print()
:
cat("0%")
cat("..10%")
Выходы:
0%..10%
Я хочу вывести индикатор прогресса во время моих длительных алгоритмов работы. Я могу легко "выкрутить" значение прогресса из моего алгоритма (например, посредством вызова функции обратного вызова функции специально для этой цели), но сложность заключается в фактическом процессе вывода текста. Каждый вызов print
создает новую строку и каждый префикс [1]
.
Есть ли способ печати в разные моменты времени, без введения разрывов строк?
Чтобы быть конкретным, я хочу добиться "анимации", которая будет выглядеть следующим образом, если будет наблюдаться в два разных раза.
0%...
...
0%...2%...4%...
Используйте cat()
вместо print()
:
cat("0%")
cat("..10%")
Выходы:
0%..10%
Ба, Андри избил меня до 28 секунд.
> for (i in 1:10) {
+ cat(paste("..", i, ".."))
+ }
.. 1 .... 2 .... 3 .... 4 .... 5 .... 6 .... 7 .... 8 .... 9 .... 10 ..
Возможно, вы можете 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]
Если вам действительно нужен индикатор выполнения как таковой, используйте txtProgressBar
для вывода консоли. Или winProgressBar
под Windows для оконной строки выполнения.
Я считаю, что вы ищете \r
в функции cat
как показано ниже:
for(i in 1:100) {
cat('\r',
i,
'% |',
rep('=', i / 4),
ifelse(i == 100, '|\n', '>'), sep = '')
Sys.sleep(.5)
}