0

我希望你一切都好。

我会在 checkboxGroupButtons 中添加一个“无”按钮。所以,如果我用文字来解释,我会添加一个按钮“无”(在我的例子中还有其他按钮->“核”、“水电”、“太阳能”、“风”),当你点击这个按钮时“无”,取消选择所有其他按钮。

是一个带有“无”按钮的示例,但不在 checkboxGroupButtons 内。

我尝试做类似的事情,但我错了。在我闪亮的应用程序中,当您单击“无”按钮时,没有选择任何响应(没错)。但是,如果我之前点击其他按钮(例如“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)
4

1 回答 1

0

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)

这按预期工作。

于 2020-07-14T13:08:46.973 回答