'Update updateselectInput() based on values of another updateSelectInput()

In the app below I want to update the second updateSelectInput() I have in order to exclude the values selected in the first updateSelectInput() after uploading a file. Normally the file uploads the dataset used for shiny widgets' values.

## app.R ##
library(shiny)
library(shinydashboard)

ui <- dashboardPage(
  dashboardHeader(),
  dashboardSidebar(
    fileInput("file1", "Choose CSV File", accept = ".csv"),

    selectInput("col","Pick a column to change its name",
                choices = colnames(iris)[-c(1)]),
    selectInput("col2","Pick a column to change its name",
                choices = colnames(iris)[-c(1)])

  ),
  dashboardBody(
    
    )
)

server <- function(session,input, output) {
  
  observeEvent(input$file1, {
    updateSelectInput(session, "col", label = "Select target country", choices = colnames(iris)[-c(1)])
    ex_names <- colnames(iris)[-1]
    ex_names <- ex_names[! ex_names %in% input$col]
    updateSelectInput(session, "col2", label = "Select reference countries", choices =colnames(iris)[-c(1)] )  

    
  })
  
 
  
}

shinyApp(ui, server)


Solution 1:[1]

Adding an observeEvent for col would update col2 every time a change has been made on the selected values of col

observeEvent(input$col, {
    ex_names <- colnames(iris)[-1]
    ex_names <- ex_names[!ex_names %in% input$col]
    updateSelectInput(session, "col2", label="Select reference countries", choices=ex_names)  
  })

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 ekolima