Shiny中如何实现selectInput联动更新?根据前序选择更新选项的问题
R Shiny 两级selectInput联动更新修复方案
原代码的监听器实际可以正常触发,问题出在参数取值逻辑错误,导致更新的选项内容不符合预期。
修正后的完整可运行代码如下:
library(shiny) ui <- fluidPage( sidebarLayout( sidebarPanel( selectInput("select_data", label = "Select Data", choices = c(" ", "islands", "iris", "mtcars")), selectInput("select_var", label = "Select Variable", choices = "" ) ), mainPanel( tableOutput("table") ) ) ) server <- function(input, output, session) { observeEvent(input$select_data,{ req(input$select_data != " ") updateSelectInput(session, "select_var", choices = names(get(input$select_data))) }) current_data <- reactive({ req(input$select_data != " ") get(input$select_data) }) output$table <- renderTable({ req(input$select_var) head(current_data()[, input$select_var, drop = FALSE]) }) } shinyApp(ui, server)
主要修改点:
- 修正选项取值逻辑:
input$select_data返回的是选中的数据集名称字符串,需通过get()函数转换为实际的数据集对象后,再用names()提取列名作为下拉选项 - 新增
req()校验:避免未选择数据集、未选择变量时的冗余报错 - 调整响应式变量定义:将原逻辑错误的
varnames调整为返回当前选中数据集的current_data - 优化表格渲染逻辑:明确按选中的变量名取数,添加
drop = FALSE保证单列返回格式为数据框,适配表格输出要求
内容的提问来源于stack exchange,提问作者writer_typer
相关产品推荐
相关产品推荐

