--- title: "Progress bar" output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{Progress bar} %\VignetteEncoding{UTF-8} %\VignetteEngine{knitr::rmarkdown} editor_options: chunk_output_type: console --- ```{r, results='asis', echo=F, message=F, warning=F} if (campsis::onCran()) { cat("This vignette was not built on CRAN. Please check out the online version [here](https://calvagone.github.io/campsis.doc/articles/v16_progress_bar.html).") knitr::knit_exit() } ``` ```{r, results='hide', echo=F, message=F, warning=F} library(campsis) ``` This vignette explains how you can track the simulation progress thanks to the package `progressr`. ### Track the simulation progress in an R script Load package `progressr` as follows: ```{r, warning=FALSE} library(progressr) ``` The easiest way to track the progress is to add the following snippet once for all in your script. By doing so, any call to the simulate method of `campsis` will display the progress bar. ```{r, echo=TRUE, eval=FALSE} handlers(global=TRUE) ``` By default, the progress bar will only give the progress as a percentage. Any user-custom handler may be provided. Please have a look at the official [documentation](https://CRAN.R-project.org/package=progressr) (Vignette `progressr`: An Introduction / 'Customizing how progress is reported'). If you want to use the default handler from `campsis`, which gives you more details about what's being simulated and what's the remaining time (ETA), you can write: ```{r, echo=TRUE, eval=FALSE} handlers(campsis_handler()) ``` If you don't want your handler(s) to be global, you can also explicitly call the method `with_progress`. The snippet below is an example of simulation where this method is called. ```{r, with_progress_example, fig.align='center', fig.height=4, fig.width=8} dataset <- Dataset(1000) %>% add(Infusion(time=0, amount=1000, compartment=1, ii=24, addl=6)) %>% add(Observations(seq(0, 7*24))) model <- model_suite$pk$`1cpt_fo` results <- with_progress(simulate(model=model, dataset=dataset, dest="mrgsolve", seed=1, replicates=3)) shadedPlot(results, "CONC", "replicate") ``` Any handler may be provided as well: ```{r} results <- with_progress(simulate(model=model, dataset=dataset, dest="mrgsolve", seed=1, replicates=3), handlers=campsis_handler()) ``` ### Track the simulation progress in a targets project The [targets](https://books.ropensci.org/targets/) package is a Make-like pipeline tool for Statistics and data science in R. With targets, you can maintain a reproducible workflow without repeating yourself. It is the ideal pipeline tool to use for medium to large simulation projects with Campsis. The following script (`_targets.R`) gives you a brief overview of what you can achieve with targets and how the progress bar can be enabled. It is important to mention that `handlers(global=TRUE)` can't be used in such a script. If you try to do so, an error message will pop up. ```{r, echo=TRUE, eval=FALSE} library(targets) source("R/my_script.R") # Packages loaded by targets packages <- c("campsis", "progressr") tar_option_set(packages=packages) # Enable progress bar options(progressr.enable=TRUE) progressr::handlers(campsis::campsis_handler()) list( tar_target( model, model_suite$pk$`1cpt_fo` ), tar_target( dataset, makeDataset(subjects=1000, dose=1000) ), tar_target( results, runSimulation(model=model, dataset=dataset, replicates=3) ) ) ``` The R folder contains as much as possible of the code (or logic) being executed, in the form of R functions. The snippet below shows the content of `my_script.R`. An explicit call to `with_progress` will make the progress bar appear when executing the target `results`. ```{r, echo=TRUE, eval=FALSE} makeDataset <- function(subjects, dose) { dataset <- Dataset(subjects=subjects) %>% add(Infusion(time=0, amount=dose, compartment=1, ii=24, addl=6)) %>% add(Observations(seq(0, 7*24))) return(dataset) } runSimulation <- function(model, dataset, replicates) { results <- with_progress(simulate(model=model, dataset=dataset, dest="mrgsolve", seed=1, replicates=replicates)) return(results) } ``` This small project can be downloaded by clicking the link below. ```{r echo=FALSE} xfun::embed_dir('resources/Targets_Squeletton/', text="Download targets squeletton") ``` To run this project, simply open an R console within your targets folder and type: ```{r, echo=TRUE, eval=FALSE} library(targets) tar_make() ```