Добавить индикатор выполнения в функцию - PullRequest
0 голосов
/ 11 февраля 2019

Я посмотрел на пару вопросов, но не смог найти решение, которое не использует циклы.Я посмотрел здесь и здесь .Теперь, как я могу добавить индикатор выполнения, который работает точно в то же время, что и эта функция:

prog<-function(){
  print("This is a test")
  Sys.sleep(05)
  setTxtProgressBar()
}

Выше приведена фиктивная функция, и я подумал об использовании system.time для захвата времени, которое требуется длякоманда печати, чтобы выполнить и использовать это для индикатора выполнения.Как я мог сделать это, не используя цикл for? РЕДАКТИРОВАТЬ Я пробовал это, но это все еще медленно:

prog<-function(y=sort(runif(200)),...){
  pb<-txtProgressBar(...)
  values<-c(0,y,1)
  lapply(values, function(x){
    Sys.sleep(0.5) 
    setTxtProgressBar(pb,x)})
  Sys.sleep(1)
  close(pb)

}

Спасибо.

1 Ответ

0 голосов
/ 11 февраля 2019

Существует пакет pbapply, который предоставляет индикатор выполнения для функций применения с использованием:

pblapply(X, FUN, ..., cl = NULL)

. Он работает так же, как и обычная apply -функция.

ЭтоФункция: pblapply(1:10, function(x) {Sys.sleep(02); print(x)}) дал такой вывод:

|                                                  | 0 % ~calculating  [1] 1
   |+++++                                             | 10% ~18s          [1] 2
   |++++++++++                                        | 20% ~16s          [1] 3
   |+++++++++++++++                                   | 30% ~14s          [1] 4
   |++++++++++++++++++++                              | 40% ~12s          [1] 5
   |+++++++++++++++++++++++++                         | 50% ~10s          [1] 6
   |++++++++++++++++++++++++++++++                    | 60% ~08s          [1] 7
   |+++++++++++++++++++++++++++++++++++               | 70% ~06s          [1] 8
   |++++++++++++++++++++++++++++++++++++++++         | 80% ~04s          [1] 9
   |+++++++++++++++++++++++++++++++++++++++++++++    | 90% ~02s          [1] 10
   |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed = 20s

Довольно аккуратно.Я не знаю, помогает ли это, но стоит взглянуть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...