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

Flexdashboard中根据输入与按钮点击动态生成gt表格的实现方法

flexdashboard 点击按钮触发动态表格实现方案

配置修正

首先需要在文档YAML头部添加runtime: shiny字段启用交互能力,否则输入组件、响应式渲染都无法生效,修正后的YAML如下:

---
title: "Report"
runtime: shiny
output: 
  flexdashboard::flex_dashboard:
    orientation: columns
    vertical_layout: fill
    theme: 
      version: 3
      bootswatch: yeti
---

在原有setup代码块末尾补充数据集读取逻辑,将下载好的map1.csv放在Rmd文件同级目录即可:

```{r setup, include=FALSE}
library(flexdashboard)
library(tidyverse)
library(gt)
library(htmltools)
library(dplyr)
library(ggplot2)
library(shiny)

# 读取本地数据集
df <- read.csv("map1.csv")
## 响应式逻辑实现
已完成的侧边栏输入组件代码不需要修改,在输入组件代码块下方添加按钮绑定的筛选逻辑即可。核心是用`eventReactive`把筛选操作和`update`按钮绑定,只有按钮被点击时才会执行筛选,不会因为下拉选项变动自动刷新表格:
```r
```{r echo=FALSE}
# 原有selectInput、actionButton代码保留,新增以下响应式逻辑
filtered_tbl <- eventReactive(input$update, {
  df %>%
    filter(
      Year == input$select_year,
      Course == input$select_code
    ) %>%
    select(Title)
})
## 动态表格渲染
在侧边栏下方的主内容区添加表格渲染代码,表格标题会跟随用户选择的年份动态更新,首次加载未点击按钮时不会显示空内容:
```r
```{r echo=FALSE}
gt_output("discussion_table")

output$discussion_table <- render_gt({
  req(filtered_tbl())
  filtered_tbl() %>%
    gt() %>%
    tab_header(
      title = md(paste0("Discussions from ", input$select_year))
    )
})
## 注意事项
- 如果筛选后没有返回结果,先检查数据集里`Year`、`Course`字段的类型和输入选项的类型是否一致,比如Year为数值型时,要把`selectInput`的choices参数改为`c(2012, 2013)`
- 不要直接在`render_gt`内直接调用输入值做筛选,否则会绕过按钮触发的逻辑,下拉选项一改动表格就会自动更新

内容的提问来源于stack exchange,提问作者Ranji Raj
相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 15:33:19