如何从selectInput的分组选择中提取对应分组变量?
嘿,这个问题我之前也碰到过!Shiny的分组selectInput默认确实只返回选中的选项值,不会带分组信息,不过有两种简单的方法可以解决:
方法一:给选项值加上分组前缀
直接在定义selectInput的choices时,把每个选项的实际值设置成分组-选项的格式,显示给用户的还是原来的选项名,这样选中后就能直接拆分出分组和选项了:
library(shiny) ui <- fluidPage( selectInput( inputId = "my_select", label = "请选择一项", # 这里用命名向量,名字是显示给用户的文本,值是实际传递给服务器的内容 choices = list( "性别" = c("性别-男" = "男", "性别-女" = "女"), "年龄" = c("年龄-青年" = "青年", "年龄-中年" = "中年") ) ), textOutput("selected_result") ) server <- function(input, output) { output$selected_result <- renderText({ # 拆分选中的值 selected_parts <- strsplit(input$my_select, "-")[[1]] paste("您选择了", selected_parts[1], "-", selected_parts[2]) }) } shinyApp(ui, server)
方法二:维护一个分组-选项的映射表
如果不想修改选项值的格式,可以在服务器端提前定义一个映射表,把每个选项对应到它的分组,然后根据选中的选项去查表:
library(shiny) # 提前定义好选项和分组的对应关系 choice_group_map <- data.frame( option = c("男", "女", "青年", "中年"), group = c("性别", "性别", "年龄", "年龄") ) ui <- fluidPage( selectInput( inputId = "my_select", label = "请选择一项", # 这里用正常的分组列表就行 choices = list( "性别" = c("男", "女"), "年龄" = c("青年", "中年") ) ), textOutput("selected_result") ) server <- function(input, output) { output$selected_result <- renderText({ # 根据选中的选项查找对应的分组 selected_group <- choice_group_map$group[choice_group_map$option == input$my_select] paste("您选择了", selected_group, "-", input$my_select) }) } shinyApp(ui, server)
两种方法都能实现你要的效果,第一种更直接,第二种适合选项较多或者需要动态维护分组的场景~
内容的提问来源于stack exchange,提问作者Ted Mosby
相关产品推荐
相关产品推荐

