我正在尝试在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)
答案 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'))
}
})