How to run code based on the condition of a selected checkbox in a shiny app?

Viewed 26

I'm trying to implement a shiny app that contains some optional checkboxes. I would like to know how do I perform an analysis with a certain selection only if it is selected and, with that, the table with the analysis made from the selection also appears on the screen.

I would like the objects inside the rbind function (below) to be included only if they are selected in the checkboxes:

ameacadas <- rbind(ameacadas_BR,ameacadas_BR2, ameacadas_pa)

External files can be found at: https://github.com/igorcobelo/data_examples (The 'minati.csv' file is the input data).

My code is presented below:

# global
library(shiny)
library(tidyverse)

# ui
ui <- navbarPage(title = "Minati Flora.",
                 tabPanel(title = "Home", 
                          br(),
                          hr(),
                          # Upload csv file 
                          sidebarLayout(
                            sidebarPanel(
                              fileInput(
                                inputId = "csvFile",
                                label = "Upload",
                                accept = c(".csv")
                              ),
                              
                              checkboxInput('BR1','Federal1'),
                              checkboxInput('BR2','Federal2'),
                              checkboxInput('PA','ParĂ¡'),
                              downloadButton("download", "Download")
                            ),
                            
                            mainPanel(
                              
                              tableOutput("modifiedData")
                            )
                          )
                 ),
                 
                 tabPanel(title = "About"),
                 
                 inverse = T)

# server
server <- function(input, output) {
  
  rawData <- eventReactive(input$csvFile, {
    req(input$csvFile)
    df <- read.csv(input$csvFile$datapath,sep=';',check.names = F,fileEncoding = "Latin1")
    
    #read extern files
    ameacadas_BR <- read.csv("ameacadas_BR.csv",sep=';',check.names = F,fileEncoding = "Latin1")
    legis_BR <- "Portaria MMA N. 148/2022"
    
    ameacadas_BR2 <- read.csv("ameacadas_BR2.csv",sep=';',check.names = F,fileEncoding = "Latin1")
    legis_BR2 <- "Decreto Federal N. 5.975/2006"
    
    ameacadas_pa <- read.csv("ameacadas_PA.csv",sep=';',check.names = F,fileEncoding = "Latin1")
    legis_pa <- "Resolucao COEMA/PA N. 54/2007"
    
    #Rbind all files selected
    ameacadas <- rbind(ameacadas_BR,ameacadas_BR2, ameacadas_pa)
    
    #General calculate
    colnames(df)[1] <- "Especie" #coluna especies
    
    ameacadas <- ameacadas %>%
      group_by(Especie) %>%
      mutate(Categoria_Ameaca = toString(Categoria_Ameaca),
             Legislacao = toString(Legislacao))
    
    ameacadas <- ameacadas[!duplicated(ameacadas[,1]),]
    
    arv_com_ameacadas <- df %>% left_join(ameacadas, by = "Especie")
    
  })
  
  output$modifiedData <- renderTable({rawData() })
  
  output$download <- downloadHandler(
    
    filename = function() {paste("Minati_Flora_",  Sys.Date(), ".csv", sep = "")},
    content = function(file){
      write.csv(rawData(), file, row.names = FALSE)
      
    }
  )
  
}

# Run the application 
shinyApp(ui = ui, server = server)
0 Answers
Related