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

Mal*_*l_a 0 r shiny htmlwidgets

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

这是示例代码:

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)
Run Code Online (Sandbox Code Playgroud)

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

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

*我使用了该功能,updateSelectizeInput因为server在我的shiny app选择中选择很大导致加载时间太长

cno*_*cno 5

您可以在用户单击选择字段时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)
Run Code Online (Sandbox Code Playgroud)