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)
这按预期工作。
希望你一切都好
我会在 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)
这按预期工作。