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.
library(teal.transform)
library(teal.data)
library(shiny)
# Define data.frame objects
<- teal.transform::rADSL
ADSL <- teal.transform::rADTTE
ADTTE
# create a list of reactive data.frame objects
<- list(
datasets 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"))
)
data_extract_spec
ObjectConsider 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.
<- data_extract_spec(
simple_des dataname = "ADSL",
filter = filter_spec(vars = "SEX", choices = c("F", "M")),
select = select_spec(choices = c("BMRKR1", "AGE"))
)
shiny
UI and Server
ModulesTo 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.
<- function(id, data_extract) {
extract_ui <- NS(id)
ns sidebarLayout(
sidebarPanel(
h3("Encoding"),
data_extract_ui(ns("data_extract"), label = "variable", data_extract)
),mainPanel(
h3("Output"),
verbatimTextOutput(ns("output"))
)
)
}
<- function(id, datasets, data_extract, join_keys) {
extract_srv moduleServer(id, function(input, output, session) {
<- data_extract_srv("data_extract", datasets, data_extract, join_keys)
reactive_extract_input <- reactive({
s format_data_extract(reactive_extract_input())
})$output <- renderPrint({
outputcat(s())
})
}) }
shiny
AppFinally, 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)
} )