如何在shinydashboard中根据tabPanel选择动态切换selectizeInput数据集
动态切换selectizeInput选项的实现方案
完全可以根据当前选中的tabPanel动态替换selectizeInput的选项,核心思路是监听tabBox的选中状态,结合updateSelectizeInput()函数更新选项。以下是修改后的完整代码:
library(shiny) library(shinydashboard) library(dplyr) # 补充加载dplyr,避免as_tibble和select函数报错 production_data <- data.frame(Variable = c('GDP', 'IP', 'Manufacturing'), Value = c(1,2,3)) %>% as_tibble() housing_data <- data.frame(Variable = c('Prices', 'Sales', 'Mortgages'), Value = c(1,2,3)) %>% as_tibble() ui <- dashboardPage( dashboardHeader(title = 'Dashboard'), dashboardSidebar(sidebarMenu( menuItem(tabName = 'Panel1', text = 'Heatmaps'), menuItem(tabName = 'Panel2', text = 'Linecharts') ) ), dashboardBody(tabItems(tabItem(tabName = 'Panel1', fluidRow(box(selectizeInput('select', 'Select Variable', choices = production_data$Variable # 初始设为production的选项 ), height=80,width=4, ) ), fluidRow(tabBox( id = 'tabset1', width = 13, height = 655, tabPanel('Production', height = 655), tabPanel('Housing', height = 655) ) ) ) ) ) ) server <- function(input, output) { # 监听tabset1的选中状态变化 observeEvent(input$tabset1, { # 根据选中的tab选择对应的数据集 if(input$tabset1 == 'Production'){ selected_data <- production_data } else { selected_data <- housing_data } # 更新selectizeInput的选项 updateSelectizeInput(inputId = 'select', choices = selected_data$Variable) }) } shinyApp(ui, server)
关键说明:
- 借助tabBox的
id = 'tabset1',通过input$tabset1可实时获取当前选中的标签页名称 observeEvent()会在标签页切换时触发,根据选中标签切换对应数据集updateSelectizeInput()负责将选中数据集的Variable列更新为selectizeInput的选项- 补充加载
dplyr包,解决原代码中as_tibble()和select()函数的依赖问题 - 初始将selectizeInput选项设为
production_data$Variable,保证页面加载时即有默认选项
内容的提问来源于stack exchange,提问作者Tanga94
相关产品推荐
相关产品推荐

