# Sig-Bio-Shiny Application
# Home Page - http://sk-sahu.github.io/sig-bio-shiny/
# Source Code - https://github.com/sk-sahu/sig-bio-shiny
# Developed and maintain by Sangram Keshari Sahu (https://sksahu.net)
sigbio.version='0.3.0'
message("Running Sig-Bio-Shiny v", sigbio.version, " | ",date())
message("Checking if SigBio v", sigbio.version, " Package is installed...")
if("SigBio" %in% rownames(installed.packages()) &&
packageVersion("SigBio") != sigbio.version){
options(repos = c(CRAN = "http://cran.rstudio.com"))
if (!require(remotes)) { install.packages("remotes") }
remotes::install_github("sk-sahu/sig-bio-shiny",
ref = paste0("v", sigbio.version))
}
suppressMessages(library(SigBio))
SigBio:::sigbio_message("Starting the application...")
# Load organisms
org <- SigBio:::app_getOrg()
ah <- org$ah_obj
orgdb <- org$ah_orgdb
kegg_list <- org$kegg_org_list
example_genelist <- "
ENSG00000196611,0.7
ENSG00000093009,1.2
ENSG00000109255,-0.3
ENSG00000134690,0.2
ENSG00000065328,1.7
ENSG00000117399,-0.5"
library(shiny)
library(shinydashboard)
ui <- dashboardPage(
dashboardHeader(title = paste0("Sig-Bio v",sigbio.version)),
dashboardSidebar(
sidebarMenu(id = "tabs",
menuItem("Input", tabName = "input", icon = icon("dashboard")),
menuItem("Mapped Ids", tabName = "mapped-ids", icon = icon("dashboard")),
menuItem("Gene Ontology", tabName = "gene-ontology", icon = icon("dashboard")),
menuItem("KEGG", tabName = "kegg", icon = icon("dashboard")),
menuItem("session-info", tabName = "session-info", icon = icon("dashboard")),
menuItem("Help", tabName = "help", icon = icon("dashboard")),
menuItem("About", tabName = "about", icon = icon("dashboard"))
)
),
dashboardBody(
tabItems(
tabItem(tabName = "input",
fluidRow(
box(title = "Gene Input",
textAreaInput("text_area_list",
label = "[Gene] or [Gene,Foldchnage] list:",
height = "150px", width = "230px",
value = example_genelist),
selectInput("id_type", label = "Input gene-id Type:", selected = "ENSEMBL",
choices=c("ENSEMBL", "REFSEQ", "ENTREZID"))
),
box(title = "Organism Input",
selectInput("org", label = "Organism:", selected = "Homo sapiens",
choices=orgdb$species),
selectInput("kegg_org_code",
label = "KEGG Organism Short Name:",
selected = "hsa",
choices=kegg_list$org_code),
helpText("Get your KEGG Organism short name from here - https://www.genome.jp/kegg/catalog/org_list.html")
),
box(title = "Significant Values Input",
numericInput("pval_cutoff", label = "pvalue-CutOff",
value = 1, min=0.001, max=1),
numericInput("qval_cutoff", label = "qvalue-CutOff",
value = 1, min=0.001, max=1)
)
),
helpText("After submit it may take 1-2 minutes. Check Progress bar in right
side cornor."),
actionButton("submit", label = "Submit",
icon = icon("angle-double-right")),
###### Validate UI #########
SigBio:::app_input_validate_ui("input_validate")
),
# mapped ids
tabItem("mapped-ids",
SigBio:::mapids_ui("mapids")
),
# gene ontology
tabItem("gene-ontology",
SigBio:::enrichGO_ui("enrichgo")
),
# KEGG-Tab ----
tabItem("kegg",
SigBio:::enrichKEGG_ui("enrichkegg")
),
# Session-info-tab ----
tabItem("session-info",
verbatimTextOutput("sessioninfo")
),
tabItem("help",
includeHTML("")
),
tabItem("about",
icon = icon("info-circle") ,
includeHTML("")
)
)
)
) # UI ends ----
# Server starts ----
server <- function(input, output) {
# a global reactive list which will hold all the input parsed through input validate module
app_input <- reactiveValues(
gene_list_uprcase = NULL,
gene_with_fc_df = NULL,
entrez_ids = NULL,
entrez_ids_with_fc = NULL,
entrez_ids_with_fc_vector = NULL,
org_pkg = NULL,
kegg_org_name = NULL,
gtf_type = NULL
)
# For submit of text area input
observeEvent(input$submit, {
# for progress bar
withProgress(message = 'Steps:', value = 0, {
incProgress(1/7, detail = paste("Getting Org Database...")) ##### Progress step 1
validated_app_input <- callModule(SigBio:::app_input_validate_server, "input_validate",
input_org = input$org,
input_orgdb = orgdb,
input_ah = ah,
input_kegg_org_code = input$kegg_org_code,
input_id_type = input$id_type,
input_text_area_list = input$text_area_list)
app_input$gene_list_uprcase = validated_app_input$gene_list_uprcase
app_input$gene_with_fc_df = validated_app_input$gene_with_fc_df
app_input$entrez_ids = validated_app_input$entrez_ids
app_input$entrez_ids_with_fc = validated_app_input$entrez_ids_with_fc
app_input$entrez_ids_with_fc_vector = validated_app_input$entrez_ids_with_fc_vector
app_input$org_pkg = validated_app_input$org_pkg
app_input$kegg_org_name = validated_app_input$kegg_org_name
app_input$gtf_type = validated_app_input$gtf_type
}) # withProgress ends here
}) # textbox area submit button observeEvent() end.
# https://stackoverflow.com/questions/53049659/loading-shiny-module-only-when-menu-items-is-clicked
observeEvent(input$tabs, {
# all maped ids
if(input$tabs=="mapped-ids"){
callModule(SigBio:::mapids_server, "mapids",
gene_list_uprcase = app_input$gene_list_uprcase,
org_pkg = app_input$org_pkg,
gtf_type = app_input$gtf_type)
}
# gene ontology
if(input$tabs=="gene-ontology"){
callModule(SigBio:::enrichGO_server, "enrichgo",
gene_list = app_input$gene_list_uprcase,
gene_list_with_fc = app_input$gene_list_with_fc,
entrez_ids_with_fc_vector = app_input$entrez_ids_with_fc_vector,
entrez_ids = app_input$entrez_ids,
org_pkg = app_input$org_pkg,
pval_cutoff = input$pval_cutoff,
qval_cutoff = input$qval_cutoff)
}
# KEGG ----
if(input$tabs=="kegg"){
incProgress(6/7, detail = paste("Doing KEGG...")) ##### Progress step 6
SigBio:::sigbio_message(paste0("Doing enrichKEGG... "))
callModule(SigBio:::enrichKEGG_server, "enrichkegg",
gene_list_with_fc = app_input$gene_list_with_fc,
entrez_ids_with_fc_vector = app_input$entrez_ids_with_fc_vector,
entrez_ids_with_fc = app_input$entrez_ids_with_fc,
entrez_ids = app_input$entrez_ids,
org_pkg = app_input$org_pkg,
kegg_org_name = app_input$kegg_org_name,
pval_cutoff = input$pval_cutoff,
qval_cutoff = input$qval_cutoff)
}
}, ignoreNULL = TRUE, ignoreInit = TRUE)
# download all the tables
output$download_tables <- downloadHandler(
filename = function(){
paste0("SigBio_tables.zip")
},
content = function(file){
#go to a temp dir to avoid permission issues
owd <- setwd(tempdir())
on.exit(setwd(owd))
fs <- c("go_bp.tsv", "go_cc.tsv", "go_mf.tsv", "kegg.tsv", "MappedIDs.tsv")
write.table(go_bp@result, file = "go_bp.tsv", sep = "\t", row.names = FALSE)
write.table(go_cc@result, file = "go_cc.tsv", sep = "\t", row.names = FALSE)
write.table(go_mf@result, file = "go_mf.tsv", sep = "\t", row.names = FALSE)
write.table(kegg_2@result, file = "kegg.tsv", sep = "\t", row.names = FALSE)
write.table(mapped_ids, file = "MappedIDs.tsv", sep = "\t", row.names = FALSE)
zip(zipfile=file, files=fs)
},
contentType = "application/zip"
)
SigBio:::sigbio_message("Finished. Check your browser for results.")
incProgress(7/7, detail = paste("Finished.")) ##### Progress step 7
output$sessioninfo <- renderPrint({
sessionInfo()
})
} # serer ends ----
# Run the application
shinyApp(ui = ui, server = server)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.