###############################
## Single mean - ui
###############################
## alternative hypothesis options
sm_alt <- c("Two sided" = "two.sided", "Less than" = "less", "Greater than" = "greater")
sm_plots <- c("Histogram" = "hist", "Simulate" = "simulate")
## list of function arguments
sm_args <- as.list(formals(single_mean))
## list of function inputs selected by user
sm_inputs <- reactive({
## loop needed because reactive values don't allow single bracket indexing
sm_args$data_filter <- if (input$show_filter) input$data_filter else ""
sm_args$dataset <- input$dataset
for (i in r_drop(names(sm_args))) {
sm_args[[i]] <- input[[paste0("sm_", i)]]
}
sm_args
})
output$ui_sm_var <- renderUI({
isNum <- .get_class() %in% c("integer", "numeric", "ts")
vars <- c("None" = "", varnames()[isNum])
selectInput(
inputId = "sm_var", label = "Variable (select one):",
choices = vars, selected = state_single("sm_var", vars), multiple = FALSE
)
})
output$ui_single_mean <- renderUI({
req(input$dataset)
tagList(
wellPanel(
conditionalPanel(
condition = "input.tabs_single_mean == 'Summary'",
uiOutput("ui_sm_var"),
selectInput(
inputId = "sm_alternative", label = "Alternative hypothesis:",
choices = sm_alt,
selected = state_single("sm_alternative", sm_alt, sm_args$alternative),
multiple = FALSE
),
sliderInput(
"sm_conf_lev", "Confidence level:",
min = 0.85, max = 0.99,
value = state_init("sm_conf_lev", sm_args$conf_lev), step = 0.01
),
numericInput(
"sm_comp_value", "Comparison value:",
state_init("sm_comp_value", sm_args$comp_value)
)
),
conditionalPanel(
condition = "input.tabs_single_mean == 'Plot'",
selectizeInput(
inputId = "sm_plots", label = "Select plots:",
choices = sm_plots,
selected = state_multiple("sm_plots", sm_plots, "hist"),
multiple = TRUE,
options = list(placeholder = "Select plots", plugins = list("remove_button", "drag_drop"))
)
)
),
help_and_report(
modal_title = "Single mean",
fun_name = "single_mean",
help_file = inclMD(file.path(getOption("radiant.path.basics"), "app/tools/help/single_mean.md"))
)
)
})
sm_plot <- reactive({
list(plot_width = 650, plot_height = 400 * max(length(input$sm_plots), 1))
})
sm_plot_width <- function() {
sm_plot() %>%
{
if (is.list(.)) .$plot_width else 650
}
}
sm_plot_height <- function() {
sm_plot() %>%
{
if (is.list(.)) .$plot_height else 400
}
}
## output is called from the main radiant ui.R
output$single_mean <- renderUI({
register_print_output("summary_single_mean", ".summary_single_mean")
register_plot_output(
"plot_single_mean", ".plot_single_mean",
height_fun = "sm_plot_height"
)
## two separate tabs
sm_output_panels <- tabsetPanel(
id = "tabs_single_mean",
tabPanel("Summary", verbatimTextOutput("summary_single_mean")),
tabPanel(
"Plot",
download_link("dlp_single_mean"),
plotOutput("plot_single_mean", height = "100%")
)
)
stat_tab_panel(
menu = "Basics > Means",
tool = "Single mean",
tool_ui = "ui_single_mean",
output_panels = sm_output_panels
)
})
sm_available <- reactive({
if (not_available(input$sm_var)) {
"This analysis requires a variable of type numeric or interval. If none are\navailable please select another dataset.\n\n" %>% suggest_data("demand_uk")
} else if (is.na(input$sm_comp_value)) {
"Please choose a comparison value"
} else {
"available"
}
})
.single_mean <- reactive({
smi <- sm_inputs()
smi$envir <- r_data
do.call(single_mean, smi)
})
.summary_single_mean <- reactive({
if (sm_available() != "available") {
return(sm_available())
}
summary(.single_mean())
})
.plot_single_mean <- reactive({
if (sm_available() != "available") {
return(sm_available())
}
validate(need(input$sm_plots, "\n\n\n Nothing to plot. Please select a plot type"))
withProgress(message = "Generating plots", value = 1, {
plot(.single_mean(), plots = input$sm_plots, shiny = TRUE)
})
})
single_mean_report <- function() {
if (is.empty(input$sm_var)) {
return(invisible())
}
if (length(input$sm_plots) == 0) {
figs <- FALSE
outputs <- c("summary")
inp_out <- list("", "")
} else {
outputs <- c("summary", "plot")
inp_out <- list("", list(plots = input$sm_plots, custom = FALSE))
figs <- TRUE
}
update_report(
inp_main = clean_args(sm_inputs(), sm_args),
fun_name = "single_mean", inp_out = inp_out,
outputs = outputs, figs = figs,
fig.width = sm_plot_width(),
fig.height = sm_plot_height()
)
}
download_handler(
id = "dlp_single_mean",
fun = download_handler_plot,
fn = function() paste0(input$dataset, "_single_mean"),
type = "png",
caption = "Save single mean plot",
plot = .plot_single_mean,
width = sm_plot_width,
height = sm_plot_height
)
observeEvent(input$single_mean_report, {
r_info[["latest_screenshot"]] <- NULL
single_mean_report()
})
observeEvent(input$single_mean_screenshot, {
r_info[["latest_screenshot"]] <- NULL
radiant_screenshot_modal("modal_single_mean_screenshot")
})
observeEvent(input$modal_single_mean_screenshot, {
single_mean_report()
removeModal() ## remove shiny modal after save
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.