保持闪亮的反应无线电按钮不变

时间:2016-08-09 15:52:16

标签: r radio-button shiny

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

问题在于我希望第二组单选按钮仅根据数字选择显示可用选项。但是,每次选择新号码时,字母选择都会重置。因此,如果我选择2和B,然后将数字更改为1,它会自动将字母选择更改为A.我希望第二个选择保留,如果是选项,那么如果我选择2和B,然后我可以将数字更改为我喜欢的任何数字,B将保持选中状态。但是如果我选择了2和C,那么将数字改为1,显然没有C低于1,那么它必须重置为某个默认值(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)

1 个答案:

答案 0 :(得分:1)

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

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'))
    }
  })