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
相关产品推荐
相关产品推荐

