Skip to contents

[Stable] End-users: This is the most important function for you to start a teal app that is composed out of teal modules.

Notes for developers: This is a wrapper function around the module_teal.R functions. Unless you are an end-user, don't use this function, but instead this module.

Usage

init(
  data,
  modules,
  title = NULL,
  filter = list(),
  header = tags$p("Add Title Here"),
  footer = tags$p("Add Footer Here"),
  id = character(0)
)

Arguments

data

(TealData or TealDataset or TealDatasetConnector or list or data.frame or MultiAssayExperiment)
R6 object as returned by teal.data::cdisc_data(), teal.data::teal_data(), teal.data::cdisc_dataset(), teal.data::dataset(), teal.data::dataset_connector() or teal.data::cdisc_dataset_connector() or a single data.frame or a MultiAssayExperiment or a list of the previous objects or function returning a named list. NOTE: teal does not guarantee reproducibility of the code when names of the list elements do not match the original object names. To ensure reproducibility please use teal.data::teal_data() or teal.data::cdisc_data() with check = TRUE enabled.

modules

(list or teal_modules)
nested list of teal_modules or module objects. See modules() and module() for more details.

title

(NULL or character)
The browser window title (defaults to the host URL of the page).

filter

(list)
You can define filters that show when the app starts. List names should be named according to datanames passed to the data argument. In case of data.frame` the list should be composed as follows:

list(<dataname1> = list(<varname1> = ..., <varname2> = ...),
     <dataname2> = list(...),
     ...)

For example, filters for variable Sepal.Length in iris can be specified as follows:

list(iris = list(Sepal.Length = list(selected = c(5.0, 7.0))))
# or
list(iris = list(Sepal.Length = c(5.0, 7.0)))

In case developer would like to include NA and Inf values in the filtered dataset.

list(Species = list(selected = c(5.0, 7.0), keep_na = TRUE, keep_inf = TRUE))
list(Species = c(c(5.0, 7.0), NA, Inf))

To initialize with specific variable filter with all values on start, one can use

list(Species = list())

filter should be set with respect to the class of the column:

  • numeric: selected should be a two elements vector defining the range of the filter.

  • Date: selected should be a two elements vector defining the date-range of the filter

  • POSIXct: selected should be a two elements vector defining the datetime range of the filter

  • character and factor: selected should be a vector of any length defining initial values selected to filter.
    filter for MultiAssayExperiment objects should be specified in slightly different way. Since it contains patient data with list of experiments, filter list should be created as follows:

list(
  <MAE dataname> = list(
    subjects = list(<column in colData> = ..., <column in colData> = ...),
    <experiment name> = list(
      subset = list(<column in rowData of experiment> = ...,
                    <column in rowData of experiment> = ...),
      select = list(<column in colData of experiment> = ...,
                    <column in colData of experiment> = ...)
    )
  )
)

By adding the filterable attribute it is possible to control which variables can be filtered for each dataset. See the example below where ADSL can only be filtered by AGE, SEX or RACE.

header

(character or shiny.tag)
the header of the app. Note shiny code placed here (and in the footer argument) will be placed in the app's ui function so code which needs to be placed in the ui function (such as loading css via htmltools::htmlDependency()) should be included here.

footer

(character or shiny.tag)
the footer of the app

id

(character)
module id to embed it, if provided, the server function must be called with shiny::moduleServer(); See the vignette for an example. However, ui_teal_with_splash() is then preferred to this function.

Value

named list with server and ui function

Examples

library(scda)

ADSL <- synthetic_cdisc_data("latest")$adsl

app <- init(
  data = cdisc_data(
    cdisc_dataset("ADSL", ADSL),
    code = "ADSL <- synthetic_cdisc_data(\"latest\")$adsl"
  ),
  modules = modules(
    module(
      "data source",
      server = function(input, output, session, datasets) {},
      ui = function(id, ...) div(p("information about data source")),
      filters = "all"
    ),
    example_module(),
    module(
      "ADSL AGE histogram",
      server = function(input, output, session, datasets) {
        output$hist <- renderPlot(
          hist(datasets$get_data("ADSL", filtered = TRUE)$AGE)
        )
      },
      ui = function(id, ...) {
        ns <- NS(id)
        plotOutput(ns("hist"))
      },
      filters = "ADSL"
    )
  ),
  title = "App title",
  filter = list(ADSL = structure(list(AGE = list()), filterable = c("AGE", "SEX", "RACE"))),
  header = tags$h1("Sample App"),
  footer = tags$p("Copyright 2017 - 2020")
)
if (FALSE) {
shinyApp(app$ui, app$server)
}

# See the vignette for an example how to embed this app as a module
# into a larger application