library (random.cdisc.data)
library (teal)
library (teal.reporter)
library (teal.transform)
library (teal.widgets)
library (tern)
library (dplyr)
modules <- list (
module (
label = "Adhoc module" ,
server = function (id, data, reporter, filter_panel_api){
moduleServer (id, function (input, output, session){
s_summary <- function (x) {
if (is.numeric (x)) {
in_rows (
"n" = rcell (sum (! is.na (x)), format = "xx" ),
"Mean (sd)" = rcell (c (mean (x, na.rm = TRUE ), sd (x, na.rm = TRUE )), format = "xx.xx (xx.xx)" ),
"IQR" = rcell (IQR (x, na.rm = TRUE ), format = "xx.xx" ),
"min - max" = rcell (range (x, na.rm = TRUE ), format = "xx.xx - xx.xx" )
)
} else if (is.factor (x)) {
vs <- as.list (table (x))
do.call (in_rows, lapply (vs, rcell, format = "xx" ))
} else {
stop ("type not supported" )
}
}
observe ({
ADSL <- get_var (data (), "ADSL" )
req (ADSL)
updateSelectInput (
inputId = "param" ,
choices = variable_choices (ADSL),
selected = c ("AGE" ),
)
})
table_q <- reactive ({
data () |>
within (
{
s_summary <- my_summary
summary_lyt <- basic_table () %>%
split_cols_by (var = "ARM" ) %>%
analyze (param, afun = s_summary)
summary_tbl <- build_table (summary_lyt, ADSL)
summary_tbl
},
my_summary = s_summary,
param = input$ param
)
})
output$ table = renderUI ({
renderPrint (table_q ()[["summary_tbl" ]])
})
# ----------
# reproducibility
# ----------
observeEvent (input$ src, {
showModal (
ui = modalDialog (
title = "Reproducible R code" ,
tags$ pre (
get_code (table_q ())
)
),
session = session
)
})
# ----------
# reporter
# ----------
simple_reporter_srv (
"simple_reporter" ,
reporter = reporter,
card_fun = function (card = TealReportCard$ new (), comment) {
card$ set_name ("Patient demographics" )
card$ append_text (toString (table_q ()[["summary_tbl" ]]), "verbatim" )
card$ append_fs (filter_panel_api$ get_filter_state ())
card$ append_encodings (list (param = input$ param))
if (! comment == "" ) {
card$ append_text ("Comment" , "header3" )
card$ append_text (comment)
}
card$ append_src (get_code (table_q ()))
card
}
)
})
},
ui = function (id) {
ns <- NS (id)
standard_layout (
output = div (
fluidRow (column (
width = 12 ,
br (), hr (),
uiOutput (ns ("table" ))
))
),
encoding = div (
simple_reporter_ui (ns ("simple_reporter" )),
br (),
tags$ label ('Encodings' , class = 'text-primary' ),
helpText ('Analysis Data:' , tags$ code ('ADSL' )),
selectInput (
inputId = ns ('param' ),
label = 'Demographic Parameter' ,
choices = NULL ,
selected = NULL ,
multiple = TRUE
),
hr (),
actionButton (
inputId = ns ("src" ),
label = "Show R code" ,
width = "100%"
)
)
)
},
datanames = c ("ADSL" )
)
)
data <- teal_data ()
data <- within (data, {
ADSL <- radsl (cached = TRUE )
})
datanames (data) <- c ("ADSL" )