R Shiny : None CheckBox 内的按钮 --> 取消选择所有选中的响应

R Shiny : None Button inside CheckBox --> Deselect all responses selected

希望你一切都好

我会在 checkboxGroupButtons 中添加一个“None”按钮。所以,如果我用文字解释,我会添加一个按钮“None”(在我的示例中还有其他按钮 --> “Nuclear”、“Hydro”、“Solar”、“Wind”),当你单击此按钮“None”,取消选择所有其他按钮。

Here 是带有“None”按钮的示例,但不在 checkboxGroupButtons 内。

我尝试做类似的事情,但我错了。在我闪亮的应用程序中,当您单击按钮“None”时,没有选择响应(没错)。但是,如果我之前点击其他按钮(例如“Nuclear”) - 然后点击按钮“None” - 所有响应都将保留(这是错误的)。我认为问题出在这里:“if (input$btn == 5)”。我不知道逻辑运算符“至少 5”而不是“==5”。

提前致谢, Aurélien.


library(shiny)
library(shinyWidgets)

ui <- fluidPage(
  checkboxGroupButtons(
    inputId = "btn", label = "Power :",
    choices = c("Nuclear" = 1, "Hydro" = 2, "Solar" = 3, "Wind" = 4, "None" = 5),
    selected = ""),
  
  verbatimTextOutput(outputId = "res"))

server <- function(input,output, session){
  
  observeEvent(input$btn, {
    if (input$btn == 5) {
          updateCheckboxGroupButtons(session, "btn", selected = character(0))
            } else {
          updateCheckboxGroupButtons(session, "btn", selected = input$btn)
            }
  }, ignoreInit = TRUE)
  

  output$res <- renderPrint({
    
    input$btn
    
  })
}

shinyApp(ui = ui, server = server)

问题是 input$btn 的长度 != 1,如果您单击多个按钮。因此检查 input$btn == 5 是不够的,因为它只比较该向量的第一个元素。您需要 %in% 运算符来检查 5 是否在该向量中,无论在哪个位置:

observeEvent(input$btn, {
    if (5 %in% input$btn) {
      updateCheckboxGroupButtons(session, "btn", selected = character(0))
    } else {
      updateCheckboxGroupButtons(session, "btn", selected = input$btn)
    }
  }, ignoreInit = TRUE)

这按预期工作。