Использование callr для отображения (оценочного) индикатора выполнения без остановки скрипта

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

Это работает достаточно хорошо при использовании system2() следующим образом:

      path <- '../Desktop/.../My_Skript_Dir/'

system2(command = "cmd.exe",
          input = paste('"./R-4.2.1/bin/Rscript.exe"',
                        paste0(path, '/Progress_Bar.R')), wait = FALSE)

Если возможно, я хотел бы избежать использованияsystem2хотя, и я недавно узнал, что это может помочь. Почти работает , используя функцию из скрипта "Progress_Bar":

      estimated_progress <- function(df = NULL, add_time = FALSE){
  require(tcltk)
  require(callr)
  
  pred <- round(nrow(df)*0.6) # prediction
  
  callr::r_bg(func = function(pred){ # open background r session
    
    pb1 <- tcltk::tkProgressBar(title='PB', label='PB', min=0, max=pred, initial=0)

    for (index in seq(pred)){
      tcltk::setTkProgressBar(pb=pb1, value=index)
      Sys.sleep(1)
    }
  }, args = list(pred))
}

df <- data.frame(matrix(nrow = 200, ncol = 3)) # dummy data

estimated_progress(df = df, add_time = FALSE)

Когда я это делаю, индикатор выполнения открывается в новом окне, как и ожидалось.

Он продолжается для следующих 1-3 функций (например,invisible(pbapply::pblapply(1:200000, function(x) x**3))) , но не более того и estimated_progress()прерывает.

Что мне здесь не хватает? Я уверен, что это совершенно очевидно, и я читал этоcallrможет работать асинхронно (смотрите здесь), но я не могу заставить его работать.

0 ответов

Другие вопросы по тегам