You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Shiny应用如何实现selectInput切换多个输出表格?

问题修复方案

原代码核心问题

  • 表格渲染逻辑被包裹在未被调用的reactive()函数中,对应代码永远不会触发执行
  • 重复定义renderDataTable属于冗余写法,不符合Shiny响应式编程规范
  • 缺失启动Shiny应用的shinyApp(ui, server)调用,代码无法直接运行

修复后可直接运行代码

注意:如果你的运行环境中已经预先定义好了data_2022和roty_2022两个数据框,可以删除代码中构造示例数据的部分。

award_types <- c("MVP", "ROTY")
# 示例数据构造开始
data_2022 <- data.frame(球员 = c("尼古拉·约基奇", "扬尼斯·阿德托昆博", "乔尔·恩比德"), 得票率 = c("87.5%", "62.3%", "51.2%"))
roty_2022 <- data.frame(球员 = c("斯科蒂·巴恩斯", "埃文·莫布利", "凯德·坎宁安"), 得票率 = c("48.2%", "47.8%", "3.1%"))
# 示例数据构造结束

library(shiny)
ui <- pageWithSidebar(
  headerPanel("NBA Awards Tracker"),
  sidebarPanel(selectInput("Awards", "Choose an Award", choices = award_types, selected = "MVP")),
  mainPanel(dataTableOutput("Table"))
)
server <- function(input, output) {
  output$Table <- renderDataTable({
    if(input$Awards == "MVP") {
      return(data_2022)
    } else {
      return(roty_2022)
    }
  })
}
shinyApp(ui, server)

优化写法(适合后续新增奖项)

用映射表替代多层条件判断,后续新增奖项只需要更新award_data_map列表即可:

server <- function(input, output) {
  award_data_map <- list(
    "MVP" = data_2022,
    "ROTY" = roty_2022
  )
  output$Table <- renderDataTable({
    award_data_map[[input$Awards]]
  })
}

内容的提问来源于stack exchange,提问作者EliMTZ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 06:15:10