The hardware and bandwidth for this mirror is donated by METANET, the Webhosting and Full Service-Cloud Provider.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]metanet.ch.

Data Extract

NEST CoreDev

With teal, app developers can open up their applications to users, allowing them to decide exactly which app data to analyze within the module.

A teal module can leverage the use of data_extract_spec objects to handle and process the user input. Examples can be found in the modules from the teal.modules.clinical package.

data_extract_spec

The role of data_extract_spec is twofold: to create a UI component in a shiny application and to pass user input from the UI to a custom server logic that can use this input to transform the data. Let’s delve into how it fulfills both of these responsibilities.

Step 1/4 - Preparing the Data

library(teal.transform)
library(teal.data)
library(shiny)

# Define data.frame objects
ADSL <- teal.transform::rADSL
ADTTE <- teal.transform::rADTTE

# create a list of reactive data.frame objects
datasets <- list(
  ADSL = reactive(ADSL),
  ADTTE = reactive(ADTTE)
)
# create join_keys
join_keys <- join_keys(
  join_key("ADSL", "ADSL", c("STUDYID", "USUBJID")),
  join_key("ADSL", "ADTTE", c("STUDYID", "USUBJID")),
  join_key("ADTTE", "ADTTE", c("STUDYID", "USUBJID", "PARAMCD"))
)

Step 2/4 - Creating a data_extract_spec Object

Consider the following example, where we create two UI elements, one to filter on a specific level from SEX variable, and a second one to select a variable from c("BMRKR1", "AGE"). data_extract_spec object is handed over to the shiny app and gives instructions to generate UI components.

simple_des <- data_extract_spec(
  dataname = "ADSL",
  filter = filter_spec(vars = "SEX", choices = c("F", "M")),
  select = select_spec(choices = c("BMRKR1", "AGE"))
)

Step 3/4 - Creating the shiny UI and Server Modules

To demonstrate different initialization options of data_extract_spec, let’s first define a shiny module that utilizes data_extract_ui and data_extract_srv to handle data_extract_spec objects. This module creates a UI component for a single data_extract_spec and prints a list of values returned from the data_extract_srv module. For more information about data_extract_ui and data_extract_srv, please refer to the package documentation.

extract_ui <- function(id, data_extract) {
  ns <- NS(id)
  sidebarLayout(
    sidebarPanel(
      h3("Encoding"),
      data_extract_ui(ns("data_extract"), label = "variable", data_extract)
    ),
    mainPanel(
      h3("Output"),
      verbatimTextOutput(ns("output"))
    )
  )
}

extract_srv <- function(id, datasets, data_extract, join_keys) {
  moduleServer(id, function(input, output, session) {
    reactive_extract_input <- data_extract_srv("data_extract", datasets, data_extract, join_keys)
    s <- reactive({
      format_data_extract(reactive_extract_input())
    })
    output$output <- renderPrint({
      cat(s())
    })
  })
}

Step 4/4 - Creating the shiny App

Finally, we include extract_ui in the UI of the shinyApp, and utilize extract_srv in the server function of the shinyApp:

shinyApp(
  ui = fluidPage(extract_ui("data_extract", simple_des)),
  server = function(input, output, session) {
    extract_srv("data_extract", datasets, simple_des, join_keys)
  }
)

Shiny app output for Data Extract

These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.