Skip to contents

Create a complete shiny application for exploring dosing regimens given a (hardcoded) PK/PD model.

Usage

genShinyApp.template(
  appDir = "shinyExample",
  verbose = TRUE,
  ODE.config = list(ode = "model", params = c(KA = 0.294), inits = c(eff = 1), method =
    "lsoda", atol = 1e-08, rtol = 1e-06)
)

write.template.server(appDir)

write.template.ui(appDir, statevars)

Arguments

appDir

a string with a directory where to store the shiny app, by default is "shinyExample". The directory appDir will be created if it does not exist.

verbose

logical specifying whether to write messages as the shiny app is generated. Defaults to TRUE.

ODE.config

model name compiled and list of parameters sent to rxSolve().

statevars

List of statevars passed to to the write.template.ui() function. This usually isn't called directly.

A PK/PD model is defined using rxode2(), and a set of parameters and initial values are defined. Then the appropriate R scripts for the shiny's user interface ui.R and the server logic server.R are created in the directory appDir.

The function evaluates the following PK/PD model by default:


    C2 = centr/V2;
    C3 = peri/V3;
    d/dt(depot) =-KA*depot;
    d/dt(centr) = KA*depot - CL*C2 - Q*C2 + Q*C3;
    d/dt(peri)  =                    Q*C2 - Q*C3;
    d/dt(eff)  = Kin - Kout*(1-C2/(EC50+C2))*eff;

This can be changed by the ODE.config parameter.

To launch the shiny app, simply issue the runApp(appDir) R command.

Value

None, these functions are used for their side effects.

Note

These functions create a simple, but working example of a dosing regimen simulation web application. Users may want to modify the code to experiment creating shiny applications for their specific rxode2 models.

See also

rxode2(),eventTable(), and the package shiny (https://shiny.posit.co).

Examples

# \donttest{
# remove myapp when the example is complete
on.exit(unlink("myapp", recursive = TRUE, force = TRUE))
# create the shiny app example (template)
genShinyApp.template(appDir = "myapp")
#> 
#> Generating an example (template) for a dosing regimen shiny app
#> 
#> Using the following PK/PD model:
#>    C2 = centr/V2;
#>    C3 = peri/V3;
#>    d/dt(depot) =-KA*depot;
#>    d/dt(centr) = KA*depot - CL*C2 - Q*C2 + Q*C3;
#>    d/dt(peri)  =                    Q*C2 - Q*C3;
#>    d/dt(eff)  = Kin - Kout*(1-C2/(EC50+C2))*eff;
#>     
#> Translating the PK/PD ODE model into C, compiling, etc.
#> 
#>  
#>  
#> using C compiler: ‘gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0’
#> 
#> Parameters and their values:
#>      KA      CL      V2       Q      V3     Kin    Kout    EC50 
#>   0.294  18.600  40.200  10.500 297.000   1.000   1.000 200.000 
#> 
#> Initial values in each compartment:
#> depot centr  pari   eff 
#>     0     0     0     1 
#> 
#> Warning: 2 arguments not used by format '
#>       #
#>       # Dosing regimen template generated by rxode2::genShinyApp.template()
#>       #
#> 
#>       debug = TRUE
#>       #wd = sprintf("%%s/../", getwd())
#>       #setwd(wd)
#> 
#>       # Server inputs: Dose, dosing regimen, dosing frequency,
#>       # dosing cycle definition, number of dosing cycles
#> 
#>       library(shiny)
#>       library(rxode2)
#> 
#>       # read objects from "rx_shiny_data.rda" in the  AppDir folder,
#>       # objects include, mod1, params, inits, method, atol, rtol.]
#> 
#>       load("./rx_shiny_data.rda")
#>       if (!rxDynLoad(mod1)) mod1 <- rxode2(mod1, modName="mod1")
#>       # Define server logic
#>       shinyServer(function(input, output) {
#> 
#>         get.cp <- reactive({
#>           ds <- input$Dose
#>           reg <- switch(input$regimen, "QD"=1, "BID"=2)
#>           cyc <- switch(input$cycle,
#>               "continous"=c(7,0),
#>               "1wkon 1wkoff"=c(7,7),
#>               "2wkon 1wkoff"=c(14,7),
#>               "3wkon 1wkoff"=c(21,7)
#>           )
#>           cyc <- [... truncated]
#> Shiny files (ui.R, server.R) plus R data saved.
#> 
#> To launch the Shiny app, type the following two R commands:
#> 
#> 	library(shiny)
#> 	runApp("myapp")
#> 
# run the shiny app
if (requireNamespace("shiny", quietly=TRUE)) {
  library(shiny)
  # runApp("myapp") # Won't launch in environments without browsers
}
# }