diff --git a/server.R b/server.R index 1ffc68e129b8b05d080d653930016dcda443034a..c0f43f60bb469766508c639c8811eb426872f103 100644 --- a/server.R +++ b/server.R @@ -17,7 +17,7 @@ shinyServer return(x) } } - + beautifulTable <- function(data) { DT::datatable( data = data, @@ -44,32 +44,31 @@ shinyServer height = "auto" ) } - + source({ "https://raw.githubusercontent.com/mahendra-mariadassou/phyloseq-extended/master/R/load-extra-functions.R" }) - + source("internals.R") - + data16S <- reactive({ - ## BIOM input if (input$dataset == "input") { ## Unhappy path if (is.null(input$fileBiom)) return() - + ## Happy path ## Import biom d <- .import_biom(input) - + ## Format tax table tax_table(d) <- .format_tax_table(tax_table(d)) - + ## import metadata and store it in phyloseq object sample_data(d) <- .import_sample_data(input, d) - + ## Rarefy data if (input$rareData) { d <- rarefy_even_depth( @@ -81,29 +80,30 @@ shinyServer } return(d) } - + ## Rdata input if (input$dataset == "rdata") { ## .import_from_rdata(input) ## does not work as a function for some reason - + ## Happy path - ne <- new.env() ## new env to store RData content and avoid border effects + ne <- + new.env() ## new env to store RData content and avoid border effects if (!is.null(input$fileRData)) load(input$fileRData$datapath, envir = ne) if (class(ne$data) == "phyloseq") return(ne$data) - + ## Unhappy paths: everything else return() } - + ## Default case load("demo/demo.RData") return(get(input$dataset)) - + }) - + data <- reactiveValues() { observe({ @@ -111,7 +111,7 @@ shinyServer isolate(data <<- data16S()) }) } - + output$downloadData <- { downloadHandler( filename = function() { @@ -122,7 +122,7 @@ shinyServer } ) } - + output$downloadUI <- renderUI({ validate(need(data16S(), "")) tags$div( @@ -131,15 +131,15 @@ shinyServer downloadButton("downloadData", "Download", style = "color: black; background-color: gray90") ) }) - + output$rarefactionMin <- renderText({ validate(need(input$fileBiom, ""), need(input$dataset == "input", "")) paste("(min sample =", format(min(sample_sums(data16S( - + ))), big.mark = " "), "reads)") }) - + output$phyloseqPrint <- renderPrint({ validate( need( @@ -149,7 +149,12 @@ shinyServer ) data16S() }) - + + output$sampledataTable <- renderTable({ + validate(need(sample_data(data16S(), errorIfNULL = FALSE), "")) + sapply(sample_data(data16S()), class) + }, rownames = TRUE, colnames = FALSE, caption = "Class of sample_data", caption.placement = "top") + output$summaryTable <- renderUI({ validate(need(data16S(), "")) box( @@ -173,7 +178,7 @@ shinyServer ) ) }) - + output$histUI <- renderUI({ validate(need(data16S(), "")) box( @@ -202,7 +207,7 @@ shinyServer ) ) }) - + output$histo <- renderPlot({ validate(need(data16S(), "Requires an abundance dataset")) @@ -218,7 +223,7 @@ shinyServer } return(p) }) - + output$histFocusUIfocusRank <- renderUI({ validate(need(data16S(), "")) radioButtons( @@ -228,19 +233,19 @@ shinyServer inline = TRUE ) }) - + output$histFocusUIfocusTaxa <- renderUI({ validate(need(data16S(), "")) selectInput( "focusTaxa", label = "Selected taxa : ", choices = unique(as.vector(tax_table(data16S( - + ))[, input$focusRank])), selected = TRUE ) }) - + output$histFocusUIfocusNbTaxa <- renderUI({ validate(need(data16S(), "")) sliderInput( @@ -252,21 +257,21 @@ shinyServer value = 10 ) }) - + output$histFocusUIfocusGrid <- renderUI({ validate(need(data16S(), "")) selectInput("focusGrid", label = "Subplot : ", choices = c("..." = 0, sample_variables(data16S()))) }) - + output$histFocusUIfocusX <- renderUI({ validate(need(data16S(), "")) selectInput("focusX", label = "X : ", choices = c("..." = 0, sample_variables(data16S()))) }) - + output$histoFocus <- renderPlot({ validate(need(data16S(), "Requires an abundance dataset")) @@ -285,7 +290,7 @@ shinyServer } return(p) }) - + output$clustUI <- renderUI({ validate(need(data16S(), "")) box( @@ -326,7 +331,7 @@ shinyServer ) ) }) - + output$clust <- renderPlot({ validate(need(data16S(), "Requires an abundance dataset")) @@ -337,7 +342,7 @@ shinyServer color = checkNull(input$clustCol) ) }) - + output$richnessAUI <- renderUI({ validate(need(data16S(), "")) box( @@ -398,7 +403,7 @@ shinyServer ) ) }) - + output$richnessA <- renderPlot({ validate(need(data16S(), "Requires an abundance dataset")) @@ -420,7 +425,7 @@ shinyServer } return(p) }) - + output$richnessATable <- renderUI({ validate(need(data16S(), "Requires an abundance dataset")) @@ -428,7 +433,7 @@ shinyServer SAMPLE = sample_names(data16S()), round(estimate_richness(data16S()), digits = 2) ))) }) - + output$richnessBUI <- renderUI({ box( title = "Setting : " , @@ -444,7 +449,7 @@ shinyServer value = "Beta diversity heatmap") ) }) - + output$richnessB <- renderPlot({ validate(need(data16S(), "Requires an abundance dataset")) @@ -477,7 +482,7 @@ shinyServer ) return(p + scale_fill_gradient2()) }) - + output$networkBUI <- renderUI({ validate(need(data16S(), "")) box( @@ -518,7 +523,7 @@ shinyServer ) ) }) - + output$networkB <- renderPlot({ validate(need(data16S(), "Requires an abundance dataset")) @@ -539,7 +544,7 @@ shinyServer ) return(p) }) - + output$richnessBTable <- renderUI({ validate(need(data16S(), "Requires an abundance dataset")) @@ -549,7 +554,7 @@ shinyServer ), digits = 2) ))) }) - + output$rarefactionCurve <- renderPlot({ validate(need(data16S(), "Requires an abundance dataset")) @@ -564,16 +569,16 @@ shinyServer if (!is.null(checkNull(input$rarefactionGrid))) { p <- p + facet_grid(paste(".", "~", input$rarefactionGrid)) } - + if (input$rarefactionMin) { p <- p + geom_vline(xintercept = min(sample_sums(data16S())), color = "gray60") } return(p + ggtitle(input$rarefactionTitle)) - + }) - + output$rarefactionCurveUI <- renderUI({ validate(need(data16S(), "")) box( @@ -608,7 +613,7 @@ shinyServer ) ) }) - + output$HeatmapUI <- renderUI({ validate(need(data16S(), "")) box( @@ -667,7 +672,7 @@ shinyServer ) ) }) - + output$Heatmap <- renderPlot({ validate(need(data16S(), "Requires an abundance dataset")) @@ -689,7 +694,7 @@ shinyServer } return(p) }) - + output$treeUI <- renderUI({ validate(need(data16S(), "")) box( @@ -728,7 +733,7 @@ shinyServer ) ) }) - + output$tree <- renderPlot({ validate( need(data16S(), "Requires an abundance dataset"), @@ -757,7 +762,7 @@ shinyServer return(p) } }) - + output$acpUI <- renderUI({ validate(need(data16S(), "")) box( @@ -821,7 +826,7 @@ shinyServer ) ) }) - + output$acp <- renderPlot({ validate( need(data16S(), "Requires an abundance dataset"), diff --git a/ui.R b/ui.R index 6d405dec8f10939f4cce4efb43d3ae65a97831b0..42a3edaf38079b0ccb12f0fe303415cd74a22095 100644 --- a/ui.R +++ b/ui.R @@ -83,6 +83,7 @@ shinyUI(dashboardPage( tabPanel( "Summary", verbatimTextOutput("phyloseqPrint"), + tableOutput("sampledataTable"), withLoader(uiOutput("summaryTable")), tags$footer( "Questions, problems or comments regarding this application should be sent to ", @@ -181,12 +182,12 @@ shinyUI(dashboardPage( Questions, problems or comments regarding this application should be sent to <a href = \"mailto:cedric.midoux@irstea.fr?subject=[Easy16S]\">cedric.midoux@irstea.fr</a> </p> - + <p> For more information about this tool, you can refer to <a href = \"http://migale.jouy.inra.fr/sites/migale.jouy.inra.fr.drupal7.migale.jouy.inra.fr/files/JOBIM2018_poster.pdf\">this poster</a>. </p> - + <p> <u>The demo dataset :</u> Chaillou, S., et al. \" <a href = \"https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4409155/\">