如何使 R Shiny 复选框输入像单选按钮一样工作?

问题描述 投票:0回答:1

运行以下 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)
r checkbox shiny
1个回答
0
投票

我建议您使用

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")
  )
)
© www.soinside.com 2019 - 2024. All rights reserved.