Nothing
########################################
# EXAMPLE CSV DATA
########################################
csvnameVector <- c(
"Simulated Rhythmic Transcripts" = system.file("extdata",
"Simphony_Example.csv",
package = "DiscoRhythm", mustWork = TRUE)
)
# Download File Names
downloadNameVector <- basename(csvnameVector)
names(downloadNameVector) <- names(csvnameVector)
########################################
# Data Collection
########################################
inputpath <- reactive({
req(!is.null(input$inCSV$datapath) | input$selectInputType == "preload")
if (input$selectInputType == "preload") {
ret <- csvnameVector[input$preData]
} else if (input$selectInputType == "csv") {
ret <- input$inCSV$datapath
}
return(ret)
})
rawData <- reactive({
req(!is.null(inputpath()))
DiscoRhythm:::discoShinyHandler({
data <- data.table::fread(inputpath(),
header = TRUE,
data.table = FALSE,
nrows = 1e5,
stringsAsFactors = FALSE
)
if (nrow(data) >= (1e5 - 1)) {
warning("File too long, reading first 100,000 rows only")
}
data
}, "Data Import",
shinySession = session
)
})
userMeta <- reactive({
req(!is.null(input$inMetaCSV$datapath))
DiscoRhythm:::discoShinyHandler({
inputpath <- input$inMetaCSV$datapath
data <- data.table::fread(inputpath,
header = TRUE,
data.table = FALSE,
nrows = 1e5,
stringsAsFactors = FALSE
)
if (nrow(data) >= (1e5 - 1)) {
warning("File too long, reading first 100,000 rows only")
}
data
}, "Data Import",
shinySession = session
)
})
selectDataSE <- reactive({
req(!is.null(input$inCSV$datapath) | input$selectInputType == "preload")
DiscoRhythm:::discoShinyHandler({
if(!is.null(input$inMetaCSV$datapath)){
se <- discoDFtoSE(rawData(),userMeta(),shinySession = session)
}else{
se <- discoDFtoSE(rawData(),shinySession = session)
}
final <- discoCheckInput(se)
final
}, "Data Import",
shinySession = session
)
})
Maindata <- reactive({
req(selectDataSE())
discoSEtoDF(selectDataSE())
})
# Low row number will cause skipping QC
hideQc <- reactive({
req(Maindata())
nrow(Maindata()) <= 10
})
# Metadata() is the main raw meta data object
# Created if Maindata() is created
Metadata <- reactive({
req(selectDataSE())
as.data.frame(SummarizedExperiment::colData(selectDataSE()))
})
########################################
# EXPLORATORY TABLES
########################################
output$rawSampleKey <- DT::renderDataTable({
req(!is.null(Maindata()))
nr <- nrow(Maindata())
# Only show at most 50 rows
Maindata()[1:min(nr, 50), ]
},
rownames = FALSE,
options = list(scrollX = TRUE, pageLength = 10, autoWidth = TRUE),
server = FALSE
)
output$rawMetadata <- DT::renderDataTable({
req(!is.null(Metadata()))
Metadata()
},
rownames = FALSE,
options = list(scrollX = TRUE, pageLength = 10, autoWidth = TRUE),
server = FALSE
)
output$sampleSummary <- output$compareSummary <- renderDT({
req(!is.null(Metadata()))
DT::datatable(discoDesignSummary(Metadata()),
options = list(dom='t',
ordering=FALSE, pageLength=500),
selection='none') %>%
formatStyle(" ",target="row",
backgroundColor = styleEqual(c("Total"), colors$discoMain2))
}, rownames = TRUE, striped = TRUE,server=FALSE
)
########################################
# MISC
########################################
# Restart App
observeEvent(input$restartAppInSelectData, {
showModal(
modalDialog(
size = "s",
easyClose = TRUE,
title = NULL,
fade = FALSE, footer = NULL,
p("Are you sure? All results will be lost."),
actionButton("restartAppConfirmed", "Restart"),
modalButton("Cancel")
)
)
})
observeEvent(input$restartAppConfirmed, {
js$reset()
})
# Code to download example data
output$Example <- downloadHandler(
filename = function() {
downloadNameVector[input$preData]
},
content = function(file) {
file.copy(csvnameVector[input$preData], file)
}
)
#############################
# Checks before proceeding
#############################
# Error messages when loading wrong data type/structure
observeEvent(input$inCSV, {
# Wrong file format
if (tolower(tools::file_ext(input$inCSV$name)) != "csv") {
showModal(
modalDialog(
HTML(paste0(
"Expected .csv file, received .",
file_ext(input$inCSV$name),
"<br/> Please upload the correct data format
or use example datasets"
)),
easyClose = TRUE, footer = NULL
)
)
}
})
# Check if a dataset is loaded before allowing user to leave selectData section
observe({
req(!(input$sidebar %in% c("selectData", "introPage")) &
is.null(input$inCSV$name) & input$selectInputType == "csv")
showModal(modalDialog(
title = "Input Data Required",
"Please upload a CSV or choose a demo CSV to continue",
easyClose = TRUE
))
updateTabItems(session, "sidebar", "selectData")
})
# Lock input after leaving
observe({
req(input$sidebar != "selectData" &
input$sidebar != "introPage")
shinyjs::hide("inputSection")
shinyjs::show("inputLocked")
})
# Preload summary table with values
observe({
req(Metadata())
req(Maindata())
if (is.null(input$inCSV$name) & input$selectInputType == "csv") {
shinyjs::hide("dataName")
shinyjs::hide("summaryTable")
summaryVal$nSamplesOri <- NA
summaryVal$nRowsOri <- NA
} else {
req(Maindata())
shinyjs::show("dataName")
shinyjs::show("summaryTable")
summaryVal$nSamplesOri <- nrow(Metadata())
summaryVal$nRowsOri <- nrow(Maindata())
}
summaryVal$nSamples <- NA
summaryVal$nRows <- NA
summaryVal$corCutoff <- NA
summaryVal$pcaCutoff <- NA
summaryVal$ANOVAstate <- NA
summaryVal$TRmerge <- NA
})
# Make sections inaccessible if no CSV loaded
observeEvent(input$selectInputType, {
myTabs <- c("filtCorrelationInterCT", "pca", "metadata",
"rowReplicateAnalysis", "overview", "regressionPage")
if (input$selectInputType == "csv") {
observe({
if (is.null(input$inCSV$datapath) | is.null(selectDataSE())) {
for (i in myTabs) {
addCssClass(selector = paste0("a[data-value='", i, "']"),
class = "inactiveLink")
}
} else {
for (i in myTabs) {
removeCssClass(selector = paste0("a[data-value='", i, "']"),
class = "inactiveLink")
}
}
})
} else {
for (i in myTabs) {
removeCssClass(selector = paste0("a[data-value='", i, "']"),
class = "inactiveLink")
}
}
})
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.