R Shiny: Нет Кнопка внутри CheckBox -> Отменить выбор всех выбранных ответов - PullRequest
0 голосов
/ 14 июля 2020

Надеюсь, у вас все хорошо.

Я бы добавил кнопку «Нет» внутри checkboxGroupButtons. Итак, если я объясню это словами, я бы добавил кнопку «Нет» (с другими кнопками в моем примере -> «Ядерная», «Гидро», «Солнечная», «Ветер»), и когда вы нажмете на эту кнопку «None», все остальные кнопки не выбраны.

Здесь - пример с кнопкой «None», но не внутри checkboxGroupButtons.

Я пытаюсь сделать похожая вещь но я ошибаюсь. В моем блестящем приложении, когда вы нажимаете кнопку «Нет», ответ не выбирается (это верно). Но, если я нажимаю ранее на другие кнопки (например, «Ядерный») - а затем на кнопку «Нет» - все ответы сохраняются (это неправильно). Я думаю, проблема здесь: «if (input $ btn == 5)». Я не знаю логического оператора «По крайней мере 5», а не «== 5».

Заранее спасибо, Орелиен.


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)

1 Ответ

0 голосов
/ 14 июля 2020

Проблема в том, что 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)

Это работает должным образом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...