闪亮的 selectizeInput:点击删除初始选择值

Shiny selectizeInput: on click remove the initial selected value

我想在用户单击小部件时从 selectizeInput 中删除初始值 (selected=)。

这是一个示例代码:

library(shiny)
library(dplyr)

ui= fluidPage(
  sidebarLayout(
    sidebarPanel(
      selectizeInput(inputId= "cyl", label= "cyl", 
                     choices= NULL, 
                     selected= sort(unique(mtcars$cyl))[1],
                     multiple=T)
    ),
    mainPanel(
      tableOutput("tab")
    )
  )
)

server= function(input, output,session) {

  updateSelectizeInput(session = session,inputId ="cyl",choices=sort(unique(mtcars$cyl)),selected=sort(unique(mtcars$cyl))[1], server = TRUE)

  df_filtered= reactive({
    mtcars %>%
    {if (is.null(input$cyl)) . else filter(., cyl %in% input$cyl)}
  })
  output$tab= renderTable(df_filtered())
}

shinyApp(ui, server)

基于示例代码的一些解释:

selectizeInput "cyl"中的初始选择值为4。当用户按下此小部件时,我希望删除 4 并清除 selected 选项。有任何想法吗?

*我在server中使用了函数updateSelectizeInput,因为在我的shiny app选项中选择很大,导致加载时间过长

当用户点击selectize字段时,您可以使用shinyjs::onclick调用updateSelectizeInput,例如:

library(shiny)
library(dplyr)
library(shinyjs)

ui= fluidPage(
  useShinyjs(),
  sidebarLayout(
    sidebarPanel(
      selectizeInput(inputId= "cyl", label= "cyl", 
                     choices= NULL, 
                     selected= sort(unique(mtcars$cyl))[1],
                     multiple=T)
    ),
    mainPanel(
      tableOutput("tab")
    )
  )
)

server= function(input, output,session) {

  updateSelectizeInput(session = session,inputId ="cyl",choices=sort(unique(mtcars$cyl)),selected=sort(unique(mtcars$cyl))[1], server = TRUE)

  df_filtered= reactive({
    mtcars %>%
    {if (is.null(input$cyl)) . else filter(., cyl %in% input$cyl)}
  })
  output$tab= renderTable(df_filtered())

  onclick("cyl", {
    updateSelectizeInput(session, "cyl", selected = "")
  })
}

shinyApp(ui, server)