diff --git a/panels/dataInput.R b/panels/dataInput.R index ef78cd83c45acab0df6d761960fa7293b6469aa0..843b94215e256e8ae4407e34179273a09cc2ca5f 100644 --- a/panels/dataInput.R +++ b/panels/dataInput.R @@ -119,9 +119,9 @@ output$dataUI <- renderUI({ }) observeEvent(input$okData, { - physeq(NULL) + raw_physeq(NULL) try( - physeq( + raw_physeq( switch( input$dataset, "demo" = @@ -171,7 +171,8 @@ observeEvent(input$okData, { outFile = showModal(dataInput(failed = TRUE)) ) - if (inherits(physeq(), "phyloseq")) { + if (inherits(raw_physeq(), "phyloseq")) { + physeq(raw_physeq()) message(paste("[Easy16S] Correct upload with", input$dataset, "mode :", message)) removeModal() } else { @@ -190,7 +191,7 @@ filterSample <- function() { inline = TRUE, choices = c( "Sample" = "sample", - sample_variables(physeq(), errorIfNULL = FALSE) + sample_variables(raw_physeq(), errorIfNULL = FALSE) ), selected = "sample" ), @@ -211,10 +212,10 @@ output$filterUI <- renderUI({ if (input$filterCriteria == "sample") { label <- "Sample to keep :" - choices <- sample_names(physeq()) + choices <- sample_names(raw_physeq()) } else { label <- "Variable to keep :" - choices <- levels(get_variable(physeq(), input$filterCriteria)) + choices <- levels(get_variable(raw_physeq(), input$filterCriteria)) } observe({ @@ -250,16 +251,18 @@ observeEvent(input$selectData, { } else { try( if (input$filterCriteria == "sample") { - physeq(prune_samples(samples = input$filterCheck, physeq())) + raw_physeq(prune_samples(samples = input$filterCheck, raw_physeq())) } else { criteria <<- input$filterCriteria check <<- input$filterCheck - physeq(subset_samples(physeq(), eval(parse(text = criteria)) %in% check)) + raw_physeq(subset_samples(raw_physeq(), eval(parse(text = criteria)) %in% check)) }, silent = TRUE, outFile = showModal(dataInput(failed = TRUE))) - if (inherits(physeq(), "phyloseq")) { + if (inherits(raw_physeq(), "phyloseq")) { + message <- paste(input$filterCheck, collapse = ", ") + message(paste("[Easy16S] Select some samples :", message)) removeModal() } else { showModal(dataInput(failed = TRUE)) @@ -275,9 +278,8 @@ transformSample <- function() { radioButtons( inputId = "transformFun", label = "Transform function : ", - selected = "none", - choices = c("None" = "none", - "Proportional Transformation" = "prop", + selected = NULL, + choices = c("Proportional Transformation" = "prop", "Square Root Transformation" = "sqrt", "Square Root Proportional Transformation" = "sqrtprop", "Centered Log-Ratio (CLR) Transformation" = "clr") @@ -286,7 +288,6 @@ transformSample <- function() { wellPanel(verbatimTextOutput("transformFun")), footer = tagList(modalButton("Cancel"), - actionButton(inputId = "okData", label = "Refresh transformation"), actionButton(inputId = "transformData", label = "Transforme") ) ) @@ -295,7 +296,6 @@ transformSample <- function() { output$transformFun <- renderText({ validate(need(input$transformFun, "")) switch (input$transformFun, - "none" = "", "prop" = paste("count_to_prop <- function(x) {return( x / sum(x) )}", "data_prop <- transform_sample_counts(data, count_to_prop)", sep = "\n"), @@ -321,19 +321,19 @@ observeEvent(input$transformData, { { removeModal() } else { + shinyWidgets::updateSwitchInput(session = session, inputId = "useTransf", value = FALSE) try( switch (input$transformFun, - "none" = {return(physeq())}, "prop" = { count_to_prop <- function(x) {return( x / sum(x) )} - physeq(transform_sample_counts(physeq(), count_to_prop)) + transform_physeq(transform_sample_counts(raw_physeq(), count_to_prop)) }, "sqrt" = { - physeq(transform_sample_counts(physeq(), sqrt)) + transform_physeq(transform_sample_counts(raw_physeq(), sqrt)) }, "sqrtprop" = { count_to_sqrtprop <- function(x) {return(sqrt(x / sum(x)))} - physeq(transform_sample_counts(physeq(), count_to_sqrtprop)) + transform_physeq(transform_sample_counts(raw_physeq(), count_to_sqrtprop)) }, "clr" = { gm_mean <- function(x, na.rm=TRUE) { @@ -344,20 +344,30 @@ observeEvent(input$transformData, { x <- log(x/gm_mean(x), base) return(x) } - physeq(transform_sample_counts(physeq(), clr)) + transform_physeq(transform_sample_counts(raw_physeq(), clr)) } ), silent = TRUE, outFile = showModal(dataInput(failed = TRUE))) - if (class(physeq()) == "phyloseq") { + if (class(transform_physeq()) == "phyloseq") { + message(paste("[Easy16S] Transfom data :", input$transformFun)) + shinyWidgets::updateSwitchInput(session = session, inputId = "useTransf", value = TRUE) removeModal() } else { showModal(dataInput(failed = TRUE)) - } + } } }) +observeEvent(input$useTransf, + if (input$useTransf) { + physeq(transform_physeq()) + } else { + physeq(raw_physeq()) + } + ) + ### Download Data ### dataDownload <- function() { modalDialog( diff --git a/server.R b/server.R index a03682f8907831826c8158a1ff830dcb001518ba..36ccbd70f7e609996174c940496f4d3a8bbf0052 100644 --- a/server.R +++ b/server.R @@ -27,7 +27,9 @@ shinyServer source("panels/tree-server.R", local = TRUE) physeq <- reactiveVal() - + raw_physeq <- reactiveVal() + transform_physeq <- reactiveVal() + showModal(dataInput()) observeEvent(input$dataButton, { diff --git a/ui.R b/ui.R index 011da158cc9a2ecdd0116aec56d0cdf263f3203d..c104cd76ed5cd8d13dd79c57779bf70533e78ef6 100644 --- a/ui.R +++ b/ui.R @@ -28,6 +28,13 @@ dashboardHeader(title = "Easy16S"), "Transform abundance", icon = icon("square-root-alt"), style = "width: 80% ; color: black ; background-color: gray90"), + shinyWidgets::switchInput("useTransf", + value = FALSE, + label = "Transformed Data", + #inline = TRUE, + size = "mini", + labelWidth = "100%" + ), actionButton("downloadButton", "Download data", icon = icon("download"),