Ответ 1
Последний печатает в реальном времени, попробуйте сделать это следующим образом:
for(i in 1:10){
Sys.sleep(0.1)
print(i)
}
Это отлично выглядит в Rstudio, но в классическом Rgui вам нужно щелкнуть консоль, чтобы она обновилась (увеличение спящего режима, например, на Sys.sleep(0.5)
помогает это увидеть). Вы можете обойти это, используя flush.console
, который очищает буфер:
for(i in 1:10){
Sys.sleep(0.1)
print(i)
flush.console()
}
Или в Windows вы можете выбрать Misc
в верхней панели инструментов и снимите флажок buffered output
.
Если ваша цель - отслеживать процесс вашего цикла, описанный выше метод кажется немного неудобным (по крайней мере, для моих глаз), когда вы используете большое количество итераций. В этом случае было бы лучше использовать индикаторы выполнения:
n<- 1000
pb <- txtProgressBar(min = 0, max = n, style = 3) #text based bar
for(i in 1:n){
Sys.sleep(0.001)
setTxtProgressBar(pb, i)
}
close(pb)
Или что-то еще приятнее:
library(tcltk)
n<- 1000
pb <- tkProgressBar(title = "Doing something", min = 0, max = n, width = 200)
for(i in 1:n){
Sys.sleep(0.001)
setTkProgressBar(pb, i, label=paste(round(i/n*100,1),"% done"))
}
close(pb)