运行以下 R Shiny MWE 代码时,单选按钮完全按照需要工作。您一次仅选择一个项目,其他项目将自动取消选择,并将所选项目打印到控制台。太棒了!
但是我怎样才能使
checkboxGroupInput()
或 checkboxInput()
以完全相同的方式工作呢?我一直在摆弄这个,但无法让它复制单选按钮的行为。不管怎样,我在底部发布了我的最后一次尝试。
我想要这种行为的原因是我将用户选择堆叠在表的同一列中。大多数行正确地使用
checkboxGroupInput()
来同时选择多个项目。有些选择项用于“一个或另一个”,这就是单选按钮的擅长之处。但为了清晰和一致性,为了用户的方便,我想在整个专栏中使用相同格式的用户输入。
这是带有单选按钮的代码,正确的(期望的)行为:
library(shiny)
anchors <- c("Beginning", "Current")
ui <- fluidPage(
radioButtons(
inputId = 'anchor_select',
label = "",
choices = anchors,
selected = NULL
)
)
server <- function(input, output) {
observeEvent(input$anchor_select, {
print(input$anchor_select)
})
}
shinyApp(ui = ui, server = server)
这是我最近尝试使用复选框来模仿单选按钮行为的失败尝试。问题是,当我选择“当前”时,它会输出“当前”两次,并且要从“当前”转到“开始”,我必须取消选择“当前”,然后选择“开始”。取消选择必须是自动的。
ui <- fluidPage(
checkboxGroupInput(
inputId = 'anchor_select',
label = "",
choices = anchors,
selected = "Beginning"
)
)
server <- function(input, output, session) {
observeEvent(input$anchor_select, {
if (length(input$anchor_select) > 1) {
last_selected <- tail(input$anchor_select, 1)
updateCheckboxGroupInput(session, "anchor_select", selected = last_selected)
print(last_selected)
} else if (length(input$anchor_select) == 1) {
print(input$anchor_select)
} else {
updateCheckboxGroupInput(session, "anchor_select", selected = "Beginning")
print("Beginning")
}
})
}
shinyApp(ui = ui, server = server)
我建议您使用
shinyWidgets::prettyRadioButtons()
,将icon
设置为icon("check")
,将shape
设置为"square"
。这样您就可以获得具有 checkboxGroupInput 样式的单选按钮的功能
anchors <- c("Beginning", "Current")
# Build UI & server and then run the app
anchors <- c("Beginning", "Current")
ui <- fluidPage(
shinyWidgets::prettyRadioButtons(
inputId = "radio_anchor",
label = "",
choices = anchors,
shape = "square",
selected = "Beginning",
icon = icon("check")
)
)