## ----setup, include = FALSE, echo=FALSE--------------------------------------- knitr::opts_chunk$set( collapse = TRUE, comment = "#>" ) ## ----library------------------------------------------------------------------ library(teal.transform) library(teal.data) library(shiny) # Define data.frame objects ADSL <- teal.data::rADSL ADTTE <- teal.data::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")) ) ## ----data_extract_spec-------------------------------------------------------- adsl_extract <- data_extract_spec( dataname = "ADSL", select = select_spec( label = "Select variable:", choices = c("AGE", "BMRKR1"), selected = "AGE", multiple = TRUE, fixed = FALSE ) ) adtte_extract <- data_extract_spec( dataname = "ADTTE", select = select_spec( choices = c("AVAL", "ASEQ"), selected = "AVAL", multiple = TRUE, fixed = FALSE ) ) data_extracts <- list(adsl_extract = adsl_extract, adtte_extract = adtte_extract) ## ----merge_ui----------------------------------------------------------------- merge_ui <- function(id, data_extracts) { ns <- NS(id) sidebarLayout( sidebarPanel( h3("Encoding"), tags$div( data_extract_ui( ns("adsl_extract"), # must correspond with data_extracts list names label = "ADSL extract", data_extracts[[1]] ), data_extract_ui( ns("adtte_extract"), # must correspond with data_extracts list names label = "ADTTE extract", data_extracts[[2]] ) ) ), mainPanel( h3("Output"), verbatimTextOutput(ns("expr")), dataTableOutput(ns("data")) ) ) } ## ----merge_srv---------------------------------------------------------------- merge_srv <- function(id, datasets, data_extracts, join_keys) { moduleServer(id, function(input, output, session) { merged_data <- merge_expression_module( data_extract = data_extracts, datasets = datasets, join_keys = join_keys, merge_function = "dplyr::left_join" ) ANL <- reactive({ data_list <- lapply(datasets, function(ds) ds()) eval(envir = list2env(data_list), expr = as.expression(merged_data()$expr)) }) output$expr <- renderText(paste(merged_data()$expr, collapse = "\n")) output$data <- renderDataTable(ANL()) }) } ## ----shinyapp, eval=FALSE----------------------------------------------------- # shinyApp( # ui = fluidPage(merge_ui("data_merge", data_extracts)), # server = function(input, output, session) { # merge_srv("data_merge", datasets, data_extracts, join_keys) # } # ) ## ----shinylive_url, echo = FALSE, results = 'asis', eval = requireNamespace("roxy.shinylive", quietly = TRUE)---- code <- paste0(c( knitr::knit_code$get("library"), knitr::knit_code$get("data_extract_spec"), knitr::knit_code$get("merge_ui"), knitr::knit_code$get("merge_srv"), knitr::knit_code$get("shinyapp") ), collapse = "\n") url <- roxy.shinylive::create_shinylive_url(code) cat(sprintf("[Open in Shinylive](%s)\n\n", url)) ## ----shinylive_iframe, echo = FALSE, out.width = '150%', out.extra = 'style = "position: relative; z-index:1"', eval = requireNamespace("roxy.shinylive", quietly = TRUE) && knitr::is_html_output() && identical(Sys.getenv("IN_PKGDOWN"), "true")---- # knitr::include_url(url, height = "800px") ## ----merge_srv2--------------------------------------------------------------- merge_srv <- function(id, datasets, data_extracts, join_keys) { moduleServer(id, function(input, output, session) { selector_list <- data_extract_multiple_srv(data_extracts, datasets, join_keys) reactive_selector_list <- reactive({ if (is.null(selector_list()$adtte_extract) || length(selector_list()$adtte_extract()$select) == 0) { selector_list()[names(selector_list()) != "adtte_extract"] } else { selector_list() } }) merged_data <- merge_expression_srv( selector_list = reactive_selector_list, datasets = datasets, join_keys = join_keys, merge_function = "dplyr::left_join" ) ANL <- reactive({ data_list <- lapply(datasets, function(ds) ds()) eval(envir = list2env(data_list), expr = as.expression(merged_data()$expr)) }) output$expr <- renderText(paste(merged_data()$expr, collapse = "\n")) output$data <- renderDataTable(ANL()) }) } ## ----shinyapp2, eval=FALSE---------------------------------------------------- # shinyApp( # ui = fluidPage(merge_ui("data_merge", data_extracts)), # server = function(input, output, session) { # merge_srv("data_merge", datasets, data_extracts, join_keys) # } # ) ## ----shinylive_url2, echo = FALSE, results = 'asis', eval = requireNamespace("roxy.shinylive", quietly = TRUE)---- code <- paste0(c( knitr::knit_code$get("library"), knitr::knit_code$get("data_extract_spec"), knitr::knit_code$get("merge_ui"), knitr::knit_code$get("merge_srv2"), knitr::knit_code$get("shinyapp2") ), collapse = "\n") url <- roxy.shinylive::create_shinylive_url(code) cat(sprintf("[Open in Shinylive](%s)\n\n", url)) ## ----shinylive_iframe2, echo = FALSE, out.width = '150%', out.extra = 'style = "position: relative; z-index:1"', eval = requireNamespace("roxy.shinylive", quietly = TRUE) && knitr::is_html_output() && identical(Sys.getenv("IN_PKGDOWN"), "true")---- # knitr::include_url(url, height = "800px")