Shiny 开发学习路径

shiny
R
bioinformatics
Author

Shixiang Wang

Published

September 13, 2023

生信领域越来越多的数据库/网页工具采用 Shiny 框架进行搭建,Shiny 的流行度/拓展性在随着时间增加。因此,掌握 Shiny 服务于自己的项目/课题成为生信人的一个新的技能。 在这篇文章中,作为一个有经验的 Shiny 学习者和 Shiny 工具的开发者,我将介绍学习和掌握 Shiny 进行开发的核心路径和相关推荐的(免费)资料。对于每一个关卡(技能点), 我会给出大致的(全职学习)时间估计(以周为单位)。

网络上的资料对于个人来说是无穷尽的,我会尽量选择我认可的最核心读物,方便大家进行相关的学习。当然, 个人的能力有限,欢迎讨论和补充。

注意,Shiny 现在已经支持了 Python 的实现,但本文只介绍以 R 为基础的学习路径。

关卡1:R 基础(2-3 周)

学习 R for Data Science

要求掌握 1-21 章的全部内容,后续章节初学者以了解为主,根据兴趣和时间进行实践。

核心要点:

  • tidyverse 的数据处理理念
  • readr 读取操作
  • dplyr 数据处理理念和核心操作
  • ggplot2 可视化理念和核心操作

读者目标自查:可以独自完成从磁盘读取文件、过滤/转换数据、分组处理/聚合数据、生成可视化图表。

关卡2: 网页基础 HTML5/CSS (0.5-1 周)

阅读一遍 HTML 教程CSS 教程

HTML 教程是重点,建议花多一些时间阅读;CSS 起到辅助和美化的作用,对于初学者,了解其基本语法、如何设定即可。

核心要点:

  • 网页结构
  • 网页标签语法以及条目
  • CSS 的设定

读者目标自查:可以徒手写一个简单的网页,并通过 CSS 引入一些格式化。

关卡3:Shiny 学习(2-3 周)

学习 Mastering Shiny

要求认真阅读全部内容,并根据读物的代码进行实践,边学边练。

核心要点:

  • Shiny app 结构
  • Shiny 网页布局
  • Shiny reactivity
  • Shiny module

读者目标自查:可以在关卡1的基础上,将可视化展示通过 Shiny app 实现,并提供多个选项用于控制图形的输出展示。

关卡4: 学习如何组织 Shiny app 代码(1 周以上)

好的代码结构,会极大地方便运维和拓展你写的 Shiny app。 下面有几种推荐的代码组织形式,读者可以根据自己的需求参考设定,也可以根据罗列的资料逐步学习。

  • Shiny 默认的代码部署方式
    • 使用一个 app.R 文件存储全部的前后端代码,适合非常小的应用。
    • 使用单独的 ui.Rserver.R 文件放前后端代码,适合稍微复杂一点的小应用。
    • 在以上两种设定的基础上,将复杂的操作逻辑统统整理为函数,放到单独的 R/ 目录下或者一个 functions.R 文件中方便调用和维护。如果更复杂一点,可以整理为一个 R 包,需要通过 R Packages 学习如何开发 R 包。
  • 使用 golem 框架,学习 Engineering Production-Grade Shiny Apps
  • 使用 rhino 框架,通过 官方各种文档 学习。

读者目标自查:理解和熟练掌握 Shiny 默认的代码部署方式。

关卡5: 学习如何部署 Shiny app(1-2 周)

当你开发的 app 可用时,接下来就是进行部署,方便自己测试或者他人使用。有以下几种部署的方式:

  1. 通过 Posit 公司提供的 shinyapps 服务。推荐初学者尝试和摸索。
  2. 自己在本地的/云服务商的 Linux 服务器上进行部署,需要了解 Linux 系统并掌握 Linux 的基本操作(阅读 The Unix Workbench)。具体的部署可以参考以下几篇文章:
    1. 在Ubuntu服务器上配置Shiny应用
    2. How to Deploy Interactive R Apps with Shiny Server
    3. How To Set Up Shiny Server on Ubuntu 20.04

读者目标自查:掌握第 1 种应用部署方式;探索第 2 种部署方式并能解决遇到的问题。

关卡6: 学习和重现完整的 Shiny app(2周以上)

这是最后一道关口,闯关意味着你具备了独立完成 app 开发的能力。大家(特别是初学者)需要谨记,一个好的 app 在于它的代码结构清晰、能够完成任务,不在于漂亮的 UI。 所有的功能实现应当把完成分析/可视化目标为第一位,然后再花时间探索具体的 UI 美化。

由于各类读者背景和需求不一致,我这里只做一些通用的学习资料推荐,针对读者所在领域的 app 开发,需要读者自行了解和掌握相关知识背景、分析技能,在此基础上寻找一些已经通过 Shiny 实现的数据库/工具的源代码仓库进行学习。

推荐资料

在本文中,我尽量避免推荐比较多的资料,因为对于初学者过多的资料带来的是混淆与压力。我希望你能够通过上述的关卡真正有效地学习和掌握 Shiny 开发的知识要点,并应用于你感兴趣的项目中去。 作为本文的最后一部分,我将提供一些非常重要的资源地址,希望在你困惑或者想要学习更多内容时找到灵感!

Enjoy playing with Shiny!