shiny-teaching-dashboard

Other

用 R 语言 Shiny 制作课堂讲解 dashboard,替代幻灯片(PPT)。当用户想把课程内容/讲义/某一章做成可交互的网页讲解、用 Shiny 做教学演示、把 PPT 换成能让学生动手调参数看结果的看板,或提到 bslib/shinydashboard/sliderInput/plotly/value_box 等 Shiny 组件用于教学时使用。产出单文件 app.R(R + Shiny),内置 5 套配色方案(bslib bs_theme)、各 Shiny 组件用于展示什么教学内容的经验判断、以及 6 个可复制调用的组件组合 template(章节式讲座/参数探索/分步揭示/概念对比/数据叙事/课堂自测),每个 template 在本 SKILL.md 给出了用法建议。即使用户只说"用 Shiny 做个教学演示/把这章做成交互的/不想用 PPT 了",只要意图是用 R Shiny 做课堂展示,也应使用本 skill。

Install

openclaw skills install shiny-teaching-dashboard

Shiny Teaching Dashboard:用 Shiny 做替代幻灯片的课堂讲解

把一节课做成单文件 app.R:学生不再被动看播放,而是动手改输入、即时看结果。核心思维转变——幻灯片是单向播放,dashboard 是可操作的学习闭环

四条核心原则

  1. 每屏一个核心观点——一个章节(nav_panel)只承载一个能讲清的点,不要把整本书塞进一页。
  2. 控件是给学生动手的——留下来的每个 sliderInput/radioButtons 都要值得学生亲手试;只会被你拖到固定值的,应该是静态图。
  3. 让结果会解释自己——改了输入,除了图变,最好配一句随之变化的 textOutput,把"看到现象"接到"理解原因"。
  4. 按真实教室设计——投影 + 后排看不清:字号放大、元素少而大、本地 runApp() 跑最稳、按光线选明暗配色。

工作流(5 步)

  1. 定结构、选架构:这节课讲几个点?哪些点适合让学生动手?据此从 references/layout-patterns.md 选整体骨架(章节式 page_navbar 最常用 / 控制台+舞台 / 侧边栏菜单 / 经典 shinydashboard)。
  2. 选一个 template 作起点:按下面《Templates 用法建议》挑最贴近的,复制到 app.R
  3. 把内容落到组件:用 references/components.md 的经验判断,决定每个点"用什么输入让学生动手、用什么输出呈现结果"。别堆控件,一屏 2–4 个足够。
  4. 选配色:按学科语境从 references/color-schemes.md 选一套 bs_theme(),注意课堂投影优先高对比/大字号那套。
  5. 填好、跑通、交付:装包 → 本地 shiny::runApp("app.R") 跑通 → 检查无报错。plot 里有中文记得用 plotly 或 showtext(见 references/setup-and-run.md),否则中文是方框。

组件 → 教学用途(速查,详见 references/components.md)

  • 让学生动手:sliderInput(参数因果,最有价值)、radioButtons(切视角)、actionButton(推进/揭示/提交)、selectInput(切数据集)。
  • 呈现结果:plotlyOutput(交互探索图)、plotOutput(ggplot 概念图)、DTOutput(可翻查的数据表)、value_box(核心数字/结论)、verbatimTextOutput(代码/统计输出)、uiOutput(动态/分步内容)。
  • 组织骨架:nav_panel(=一节)、card(=一个知识块)、layout_sidebar(控制台+舞台)、accordion(折叠的深入内容)、navset_card_tab(并置对比)。

Templates 用法建议

6 个完整可运行的 app.Rtemplates/(语法均已校验)。复制后把占位内容换成你的,保留结构。挑选指南:

  • navbar-lecture.R — 章节式讲座(★默认首选,替代整套幻灯片) 何时用:把一整章/一节课做成交互讲解,多个并列主题。顶部每个 tab 是一"节"(引入/原理/应用/小结),跟着点着走。 装:shiny, bslib, bsicons, ggplot2。改造:增删 nav_panel() 调整章节;"原理"节里那个 slider→plot 换成你的可调演示;"小结"节的 value_box 放本章 take-home。大多数"把这章做成交互的"需求从它起步。

  • param-explorer.R — 参数探索器(讲透一个可调模型) 何时用:聚焦讲清一个含参数的模型/关系(分布、函数、供需、物理定律……),让学生拖参数看曲线怎么变。 装:shiny, bslib, plotly。改造:把"正态分布"换成你的模型,sidebar 放它的关键参数,主区 plotlyOutput 画随参数变化的图,value_box 显示当前关键读数。plotly 中文免处理。

  • stepwise-reveal.R — 分步揭示(替代幻灯片"逐点出现") 何时用:推导、解题、论证——需要按节奏一步步揭示、留悬念的内容。点"下一步"逐条出现。 装:shiny, bslib。改造:把推导拆进 steps 列表(每步 h 标题 + b 正文,正文可含公式/HTML);可选的深入材料放进 accordion

  • concept-compare.R — 概念/案例/学派对比 何时用:讲"两种理论""三种方法""正反观点"等需要对比的内容。前几个 tab 各讲一个视角,最后一页并置三栏按维度对照。 装:shiny, bslib。改造:每个 nav_panel 填一个视角的主张+证据;并置页按你的对比维度(假设/适用/局限……)逐行对齐。纯展示,server 为空。

  • data-story.R — 数据叙事 何时用:带学生分析一份数据集,讲"从数据里看出了什么"。关键指标 + 自选 X/Y 的交互散点 + 可翻查原始表。 装:shiny, bslib, plotly, DT。改造:把 dat 换成你的数据(read.csv 或随堂数据),value_box 放最该强调的几个数,selectInput 的 choices 跟着你的变量名走。

  • quiz-checkpoint.R — 课堂自测/投票 何时用:一节讲完做巩固检查点,或课堂即时提问。选答后点"提交"给即时对错+讲解。 装:shiny, bslib。改造:把题目填进 quiz 列表(q 题干 / opts 选项 / ans 正确项序号 / why 讲解)。注意选项文字里别用英文双引号(会断字符串),用中文「」。

输出约定

  • 产出一个单文件 app.R(教学分发最省事),文件名或所在文件夹用 kebab-case 反映主题。默认写到当前工作目录,用户指定路径就用用户的。
  • 不要把整份 R 源码贴进对话——用 Write 写文件,对话里只给:路径、install.packages(...) 一行、shiny::runApp("…") 一行、以及一句说明(这个 app 分几节、关键交互是什么、用了哪个 template 和哪套配色)。
  • 本环境通常无法替用户启动 Shiny GUI/浏览器,交付即文件 + 运行命令;如能用 Rscript -e "parse('app.R')" 验证语法就先验一下再交付。

渐进式披露:何时读哪个文件

你正要……
选整体骨架(章节式/控制台+舞台/侧边栏/经典看板)、处理课堂投影演示references/layout-patterns.md
判断某教学内容该用哪个输入/输出/容器组件references/components.md
选配色、让图表配色跟随主题、字体设置references/color-schemes.md
装包/运行/部署/plot 中文字体/reactive 速记references/setup-and-run.md
要现成的组件组合骨架templates/ 下对应文件 + 上面的用法建议

常见反模式(别犯)

  • ❌ 把 PPT 逐页搬成静态卡片——那只是网页版 PPT,没用上 Shiny 的交互价值。每节问"学生能动手试什么"。
  • ❌ 一屏堆十个控件和五张图——认知过载。一屏 ≤1 核心图 + ≤4 控件。
  • ❌ ggplot 图里中文不管——会显示成方框。用 plotly 或 showtext(setup-and-run.md)。
  • ❌ R 字符串里嵌英文双引号——会断字符串导致解析失败,中文文案用「」或单引号。
  • ❌ 现场依赖外网 API/数据——课堂网络不可靠。数据随 app 打包,本地 runApp()
  • ❌ 把几百行 R 糊进对话——Write 写文件,对话只给路径 + 运行命令。