---
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::on_cran()) {
cat(
"This vignette was not built on CRAN. Please check out the online version [here](https://campsisverse.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,
make_dataset(subjects = 1000, dose = 1000)
),
tar_target(
results,
run_simulation(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}
make_dataset <- 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)
}
run_simulation <- 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()
```