Using data table

NEST CoreDev

teal application to display data table with various datasets types

This vignette will guide you through the four parts to create a teal application using various types of datasets using the data table module tm_data_table():

  1. Load libraries
  2. Create data sets
  3. Create an app variable
  4. Run the app

1 - Load libraries

library(teal.modules.general) # used to create the app

2 - Create data sets

Inside this app 3 datasets will be used

  1. ADSL A wide data set with subject data
  2. ADTTE A long data set with time to event data
  3. ADLB A long data set with lab measurements for each subject
data <- teal_data()
data <- within(data, {
  ADSL <- teal.modules.general::rADSL
  ADTTE <- teal.modules.general::rADTTE
  ADLB <- teal.modules.general::rADLB
datanames <- c("ADSL", "ADTTE", "ADLB")
datanames(data) <- datanames
join_keys(data) <- default_cdisc_join_keys[datanames]

3 - Create an app variable

This is the most important section. We will use the teal::init() function to create an app. The data will be handed over using The app itself will be constructed by multiple calls of tm_data_table() using different combinations of data sets.

# configuration for the two-datasets example
mod1 <- tm_data_table(
  label = "Two datasets",
  variables_selected = list(
    ADTTE = c(
      "PARAM", "PARAMCD", "ARM", "ARMCD", "AVAL", "CNSR"

# configuration for the subsetting or changing order of datasets
mod2 <- tm_data_table(
  label = "Datasets order",
  variables_selected = list(
    ADLB = c(
  datasets_selected = c("ADTTE", "ADLB", "ADSL")

# configuration for the advanced usage of DT options and extensions
mod3 <- tm_data_table(
  label = "Advanced DT usage",
  dt_args = list(extensions = c("Buttons", "ColReorder", "FixedHeader")),
  dt_options = list(
    searching = FALSE,
    pageLength = 30,
    lengthMenu = c(5, 15, 25, 50, 100),
    scrollX = FALSE,
    dom = "lBrtip",
    buttons = c("copy", "csv", "excel", "pdf", "print"),
    colReorder = TRUE,
    fixedHeader = TRUE

# initialize the app
app <- init(
  data = data,
  modules = modules(

4 - Run the app

A simple shiny::shinyApp() call will let you run the app. Note that app is only displayed when running this code inside an R session.

shinyApp(app$ui, app$server, options = list(height = 1024, width = 1024))