aboutsummaryrefslogtreecommitdiff
path: root/R
diff options
context:
space:
mode:
Diffstat (limited to 'R')
-rw-r--r--R/app.R2
-rw-r--r--R/server.R13
-rw-r--r--R/ui.R192
3 files changed, 96 insertions, 111 deletions
diff --git a/R/app.R b/R/app.R
index 8048fa4..64b5d2a 100644
--- a/R/app.R
+++ b/R/app.R
@@ -6,8 +6,6 @@ app <- function() {
stop("The package 'shiny' must be installed to launch the Rnaught web application.")
if (!requireNamespace("shinyBS", quietly=TRUE))
stop("The package 'shinyBS' must be installed to launch the Rnaught web application.")
- if (!requireNamespace("shinyjs", quietly=TRUE))
- stop("The package 'shinyjs' must be installed to launch the Rnaught web application.")
shiny::shinyApp(ui(), server)
}
diff --git a/R/server.R b/R/server.R
index 9929010..e8d2970 100644
--- a/R/server.R
+++ b/R/server.R
@@ -1,19 +1,6 @@
#' @importFrom methods is
#' @importFrom utils read.csv write.csv
server <- function(input, output) {
- # Hide the sidebar if the 'About' tab is active.
- shiny::observeEvent(input$tabset, {
- if (input$tabset == "About") {
- shinyjs::hideElement(selector="#sidebar")
- shinyjs::removeCssClass("main", "col-sm-8")
- shinyjs::addCssClass("main", "col-sm-12")
- } else {
- shinyjs::showElement(selector="#sidebar")
- shinyjs::removeCssClass("main", "col-sm-12")
- shinyjs::addCssClass("main", "col-sm-8")
- }
- })
-
reactive <- shiny::reactiveValues(
data_table=data.frame(Name=character(0), `Reporting Frequency`=character(0), `Case Counts`=numeric(0), check.names=FALSE),
est_table=data.frame(Dataset=character(0)),
diff --git a/R/ui.R b/R/ui.R
index 8233ba5..63e21eb 100644
--- a/R/ui.R
+++ b/R/ui.R
@@ -1,114 +1,114 @@
ui <- function() {
shiny::fluidPage(
- shinyjs::useShinyjs(),
-
# Title.
shiny::titlePanel(shiny::HTML(paste0("Rnaught: an estimation suite for R", shiny::tags$sub("0")))),
# Sidebar layout.
shiny::sidebarLayout(
- # Sidebar.
- shiny::sidebarPanel(id="sidebar",
- # Data tab sidebar.
- shiny::conditionalPanel(condition="input.tabset == 'Data'",
- shiny::h4("Enter data"),
- # Data input method selection.
- shiny::radioButtons(inputId="dataInputMethod", label="", choices=list("Manually"=1, "Upload a .csv file"=2, "Paste a .csv file"=3)),
- # Option 1: Manual entry.
- shiny::conditionalPanel(condition="input.dataInputMethod == '1'",
- shiny::textInput(inputId="dataName", label="Dataset name"),
- shiny::span(shiny::textOutput(outputId="dataNameWarn"), style="color: red"),
- shiny::fluidRow(
- shiny::column(8, shiny::textInput(inputId="dataCounts", label=shiny::HTML(paste0("Case counts", shiny::tags$sup(id="dataCountsHelp", "[?]"))))),
- shiny::column(4, shiny::selectInput(inputId="dataUnits", label="Reporting frequency", choices=list("Daily", "Weekly")))
+ # Sidebar. Hidden if the 'About' tab is selected.
+ shiny::conditionalPanel(condition="input.tabset != 'About'",
+ shiny::sidebarPanel(id="sidebar",
+ # Data tab sidebar.
+ shiny::conditionalPanel(condition="input.tabset == 'Data'",
+ shiny::h4("Enter data"),
+ # Data input method selection.
+ shiny::radioButtons(inputId="dataInputMethod", label="", choices=list("Manually"=1, "Upload a .csv file"=2, "Paste a .csv file"=3)),
+ # Option 1: Manual entry.
+ shiny::conditionalPanel(condition="input.dataInputMethod == '1'",
+ shiny::textInput(inputId="dataName", label="Dataset name"),
+ shiny::span(shiny::textOutput(outputId="dataNameWarn"), style="color: red"),
+ shiny::fluidRow(
+ shiny::column(8, shiny::textInput(inputId="dataCounts", label=shiny::HTML(paste0("Case counts", shiny::tags$sup(id="dataCountsHelp", "[?]"))))),
+ shiny::column(4, shiny::selectInput(inputId="dataUnits", label="Reporting frequency", choices=list("Daily", "Weekly")))
+ ),
+ shinyBS::bsTooltip(id="dataCountsHelp", "Enter as a comma-separated list of positive integers, with at least two entries. Ex: 1,1,2,3,5,8", placement="right", trigger="hover"),
+ shiny::span(shiny::textOutput(outputId="dataCountsWarn"), style="color: red")
),
- shinyBS::bsTooltip(id="dataCountsHelp", "Enter as a comma-separated list of positive integers, with at least two entries. Ex: 1,1,2,3,5,8", placement="right", trigger="hover"),
- shiny::span(shiny::textOutput(outputId="dataCountsWarn"), style="color: red")
- ),
- # Option 2: Upload .csv file.
- shiny::conditionalPanel(condition="input.dataInputMethod == '2'",
- shiny::fileInput(inputId="dataUpload", label="", accept=c("text/csv", "text/comma-separated-values,text/plain", ".csv")),
- ),
- # Option 3: Paste .csv file.
- shiny::conditionalPanel(condition="input.dataInputMethod == '3'",
- shiny::textAreaInput(inputId="dataPaste", label="", rows=8, resize="none"),
- ),
- # Warning text for .csv upload / paste.
- shiny::conditionalPanel(condition="['2', '3'].includes(input.dataInputMethod)",
- shiny::span(shiny::textOutput(outputId="dataCSVWarn"), style="color: red"),
+ # Option 2: Upload .csv file.
+ shiny::conditionalPanel(condition="input.dataInputMethod == '2'",
+ shiny::fileInput(inputId="dataUpload", label="", accept=c("text/csv", "text/comma-separated-values,text/plain", ".csv")),
+ ),
+ # Option 3: Paste .csv file.
+ shiny::conditionalPanel(condition="input.dataInputMethod == '3'",
+ shiny::textAreaInput(inputId="dataPaste", label="", rows=8, resize="none"),
+ ),
+ # Warning text for .csv upload / paste.
+ shiny::conditionalPanel(condition="['2', '3'].includes(input.dataInputMethod)",
+ shiny::span(shiny::textOutput(outputId="dataCSVWarn"), style="color: red"),
+ ),
+ # Button to add data.
+ shiny::actionButton(inputId="addData", label="Add"),
),
- # Button to add data.
- shiny::actionButton(inputId="addData", label="Add"),
- ),
- # Estimators tab sidebar
- shiny::conditionalPanel(condition="input.tabset == 'Estimators'",
- shiny::h4("Estimators"),
- # Collapsible menu for estimation methods.
- shinyBS::bsCollapse(id="estCollapse",
- # WHITE & PANAGO (WP).
- shinyBS::bsCollapsePanel(title="White & Panago (WP)",
- "This is a description of the method.",
- shiny::br(), shiny::br(),
- shiny::radioButtons(inputId="serialWPKnown", label="Is the mean serial interval known?", inline=TRUE, choices=list("Yes"=1, "No"=2)),
- # Known serial interval.
- shiny::conditionalPanel(condition="input.serialWPKnown == '1'",
- shiny::fluidRow(
- shiny::column(8, shiny::textInput(inputId="serialWPInput", label="Mean Serial Interval")),
- shiny::column(4, shiny::selectInput(inputId="serialWPUnits", label="Time units", choices=list("Days", "Weeks")))
+ # Estimators tab sidebar
+ shiny::conditionalPanel(condition="input.tabset == 'Estimators'",
+ shiny::h4("Estimators"),
+ # Collapsible menu for estimation methods.
+ shinyBS::bsCollapse(id="estCollapse",
+ # WHITE & PANAGO (WP).
+ shinyBS::bsCollapsePanel(title="White & Panago (WP)",
+ "This is a description of the method.",
+ shiny::br(), shiny::br(),
+ shiny::radioButtons(inputId="serialWPKnown", label="Is the mean serial interval known?", inline=TRUE, choices=list("Yes"=1, "No"=2)),
+ # Known serial interval.
+ shiny::conditionalPanel(condition="input.serialWPKnown == '1'",
+ shiny::fluidRow(
+ shiny::column(8, shiny::textInput(inputId="serialWPInput", label="Mean Serial Interval")),
+ shiny::column(4, shiny::selectInput(inputId="serialWPUnits", label="Time units", choices=list("Days", "Weeks")))
+ ),
+ shiny::span(shiny::textOutput(outputId="serialWPWarn"), style="color: red")
),
- shiny::span(shiny::textOutput(outputId="serialWPWarn"), style="color: red")
+ # Unknown serial interval.
+ shiny::conditionalPanel(condition="input.serialWPKnown == '2'",
+ shiny::h5("Grid Search Parameters"),
+ shiny::fluidRow(
+ shiny::column(4, shiny::textInput(inputId="gridLengthInput", label="Grid length", value="100")),
+ shiny::column(4, shiny::textInput(inputId="gridShapeInput", label="Max. shape", value="10")),
+ shiny::column(4, shiny::textInput(inputId="gridScaleInput", label="Max. scale", value="10"))
+ ),
+ shiny::fluidRow(
+ shiny::column(4, shiny::span(shiny::textOutput(outputId="gridLengthWarn"), style="color: red")),
+ shiny::column(4, shiny::span(shiny::textOutput(outputId="gridShapeWarn"), style="color: red")),
+ shiny::column(4, shiny::span(shiny::textOutput(outputId="gridScaleWarn"), style="color: red"))
+ )
+ ),
+ shiny::actionButton(inputId="addWP", label="Add")
),
- # Unknown serial interval.
- shiny::conditionalPanel(condition="input.serialWPKnown == '2'",
- shiny::h5("Grid Search Parameters"),
+ # SEQUENTIAL BAYES (seqB).
+ shinyBS::bsCollapsePanel(title="Sequential Bayes (seqB)",
+ "This is a description of the method.",
+ shiny::br(), shiny::br(),
shiny::fluidRow(
- shiny::column(4, shiny::textInput(inputId="gridLengthInput", label="Grid length", value="100")),
- shiny::column(4, shiny::textInput(inputId="gridShapeInput", label="Max. shape", value="10")),
- shiny::column(4, shiny::textInput(inputId="gridScaleInput", label="Max. scale", value="10"))
+ shiny::column(8, shiny::textInput(inputId="serialseqBInput", label="Mean Serial Interval")),
+ shiny::column(4, shiny::selectInput(inputId="serialseqBUnits", label="Time units", choices=list("Days", "Weeks")))
),
- shiny::fluidRow(
- shiny::column(4, shiny::span(shiny::textOutput(outputId="gridLengthWarn"), style="color: red")),
- shiny::column(4, shiny::span(shiny::textOutput(outputId="gridShapeWarn"), style="color: red")),
- shiny::column(4, shiny::span(shiny::textOutput(outputId="gridScaleWarn"), style="color: red"))
- )
+ shiny::span(shiny::textOutput(outputId="serialseqBWarn"), style="color: red"),
+ shiny::textInput(inputId="kappaInput", label=shiny::HTML(paste0("Maximum value of the uniform prior", shiny::tags$sup(id="kappaTool", "[?]"))), value="20"),
+ shinyBS::bsTooltip(id="kappaTool", "Some information. By default, this is set to 20.", placement="right", trigger="hover"),
+ shiny::span(shiny::textOutput(outputId="kappaWarn"), style="color: red"),
+ shiny::actionButton(inputId="addseqB", label="Add")
),
- shiny::actionButton(inputId="addWP", label="Add")
- ),
- # SEQUENTIAL BAYES (seqB).
- shinyBS::bsCollapsePanel(title="Sequential Bayes (seqB)",
- "This is a description of the method.",
- shiny::br(), shiny::br(),
- shiny::fluidRow(
- shiny::column(8, shiny::textInput(inputId="serialseqBInput", label="Mean Serial Interval")),
- shiny::column(4, shiny::selectInput(inputId="serialseqBUnits", label="Time units", choices=list("Days", "Weeks")))
- ),
- shiny::span(shiny::textOutput(outputId="serialseqBWarn"), style="color: red"),
- shiny::textInput(inputId="kappaInput", label=shiny::HTML(paste0("Maximum value of the uniform prior", shiny::tags$sup(id="kappaTool", "[?]"))), value="20"),
- shinyBS::bsTooltip(id="kappaTool", "Some information. By default, this is set to 20.", placement="right", trigger="hover"),
- shiny::span(shiny::textOutput(outputId="kappaWarn"), style="color: red"),
- shiny::actionButton(inputId="addseqB", label="Add")
- ),
- # INCIDENCE DECAY (ID).
- shinyBS::bsCollapsePanel(title="Incidence Decay (ID)",
- "This is a description of the method.",
- shiny::br(), shiny::br(),
- shiny::fluidRow(
- shiny::column(8, shiny::textInput(inputId="serialIDInput", label="Mean Serial Interval")),
- shiny::column(4, shiny::selectInput(inputId="serialIDUnits", label="Time units", choices=list("Days", "Weeks")))
- ),
- shiny::span(shiny::textOutput(outputId="serialIDWarn"), style="color: red"),
- shiny::actionButton(inputId="addID", label="Add")
- ),
- # INCIDENCE DECAY & EXPONENTIAL ADJUSTEMENT (IDEA).
- shinyBS::bsCollapsePanel(title="Incidence Decay and Exponential Adjustement (IDEA)",
- "This is a description of the method.",
- shiny::br(), shiny::br(),
- shiny::fluidRow(
- shiny::column(8, shiny::textInput(inputId="serialIDEAInput", label="Mean Serial Interval")),
- shiny::column(4, shiny::selectInput(inputId="serialIDEAUnits", label="Time units", choices=list("Days", "Weeks")))
+ # INCIDENCE DECAY (ID).
+ shinyBS::bsCollapsePanel(title="Incidence Decay (ID)",
+ "This is a description of the method.",
+ shiny::br(), shiny::br(),
+ shiny::fluidRow(
+ shiny::column(8, shiny::textInput(inputId="serialIDInput", label="Mean Serial Interval")),
+ shiny::column(4, shiny::selectInput(inputId="serialIDUnits", label="Time units", choices=list("Days", "Weeks")))
+ ),
+ shiny::span(shiny::textOutput(outputId="serialIDWarn"), style="color: red"),
+ shiny::actionButton(inputId="addID", label="Add")
),
- shiny::span(shiny::textOutput(outputId="serialIDEAWarn"), style="color: red"),
- shiny::actionButton(inputId="addIDEA", label="Add")
+ # INCIDENCE DECAY & EXPONENTIAL ADJUSTEMENT (IDEA).
+ shinyBS::bsCollapsePanel(title="Incidence Decay and Exponential Adjustement (IDEA)",
+ "This is a description of the method.",
+ shiny::br(), shiny::br(),
+ shiny::fluidRow(
+ shiny::column(8, shiny::textInput(inputId="serialIDEAInput", label="Mean Serial Interval")),
+ shiny::column(4, shiny::selectInput(inputId="serialIDEAUnits", label="Time units", choices=list("Days", "Weeks")))
+ ),
+ shiny::span(shiny::textOutput(outputId="serialIDEAWarn"), style="color: red"),
+ shiny::actionButton(inputId="addIDEA", label="Add")
+ )
)
)
)