【问题标题】:Keeping Shiny Reactive Radio Buttons Constant保持闪亮的反应单选按钮不变
【发布时间】:2016-12-15 18:30:37
【问题描述】:

我正在尝试在 Shiny 中创建一些反应式单选按钮,但遇到了一些问题。下面的代码创建了我所看到的示例。例如,数字有 3 种选择 - 1、2 和 3。每一种都有自己可能的字母选择 - 如果选择 1 或 3,则 A 或 B 可用,但如果选择 2,则 A、B、或 C 可用。

问题在于我希望第二组单选按钮仅显示可用的选项,具体取决于数字选择。但是,每次我选择一个新数字时,字母选择都会重置。因此,如果我选择了 2 和 B,然后将数字更改为 1,它会自动将字母选择更改为 A。我希望保留第二个选择,如果它是一个选项,例如,如果我选择了 2 和 B,然后我可以将数字更改为我喜欢的任何数字,并且 B 将保持选中状态。但是如果我选择了 2 和 C,然后将数字更改为 1,显然 1 下没有 C,那么它必须重置为某个默认值(A,很可能)。

我将如何设置单选按钮以这种方式运行?

library('shiny')
library('shinydashboard')

# Input Data
inputData <- data.frame(a = c(1, 1, 2, 2, 2, 3, 3),
                        b = c('A', 'B', 'A', 'B', 'C', 'A', 'B')
)

# Body #############################
body <- dashboardBody(

  radioButtons('selectA', 'Select Number',
               choices = unique(inputData$a)),

  uiOutput('selectB')
)

# UI #############################
ui <- dashboardPage(
  dashboardHeader(title = 'Test', titleWidth = 290),
  dashboardSidebar(width = 290),
  body
)

# Server #############################
server <- function(input, output){

  output$selectB <- renderUI({
    radioButtons('selectB', 'Select Letter', 
                 choices = unique(inputData[inputData$a == input$selectA, ]$b),
                 inline = TRUE)
  })
}

shinyApp(ui, server)

【问题讨论】:

    标签: r radio-button shiny


    【解决方案1】:

    您可以测试是否在第一组单选按钮上选择了某些内容,并相应地选择第二组单选按钮的选定参数,如下所示:

    output$selectB <- renderUI({
        if(is.null(input$selectB)){
          radioButtons('selectB', 'Select Letter', 
           choices = unique(inputData[inputData$a == input$selectA, ]$b),
           inline = TRUE)
        }
        else{
          radioButtons('selectB', 'Select Letter', 
           choices = unique(inputData[inputData$a == input$selectA, ]$b),
           inline = TRUE, selected = ifelse(input$selectB %in% 
            unique(inputData[inputData$a == input$selectA, ]$b), input$selectB, 'A'))
        }
      })
    

    【讨论】:

    • 这非常接近。我所要做的就是将您选择的语句编辑为selected = ifelse(input$selectB %in% unique(inputData[inputData$a == input$selectA, ]$b), input$selectB, 'A'))。如果选择了 2/C,则允许更改回默认值 A,然后我切换回 1。否则,这非常有效!感谢您的帮助。
    • 没问题!我将编辑我的答案以包含该更改。
    猜你喜欢
    • 2021-05-01
    • 2019-08-02
    • 2016-07-08
    • 2015-10-27
    • 1970-01-01
    • 2015-09-19
    • 2021-09-03
    • 1970-01-01
    • 2016-05-04
    相关资源
    最近更新 更多