Использование 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
может работать асинхронно (смотрите здесь), но я не могу заставить его работать.