使用shiny程序设计一个R包的交互界面

Shiny是RStudio公司开发的一个R包,通过它可以用R语言开发交互式web应用。

Shiny包的特点在于不需要太了解网页语言(比如我就只看了一些html和CSS基础语法,反正看过也没记住多少),可以用纯R来搭建,生成的网页应用是动态交互的,而且是即时更新的。

前段时间在http://shiny.rstudio.com/articles/看了点关于shiny的基础语法,并且在http://www.biotrainee.com/thread-1563-1-1.html论坛上看到一篇使用shiny将一个热图R包做成一个交互式界面的文章,于是乎自己也写一个练练手。

Shiny程序主要分ui和server两部分:

  1. Ui界面一般指的是交互界面,上面可以展示图片、输入参数以及一系列的按钮等美化工具
  2. server一般指后台操作,通过函数将UI界面的输入通过一系列的过程转化为输出,最终呈现的UI界面上

下面我整理一下写一个shiny程序的流程,以我写好的shiny程序为例。这个shiny app主要是将ComplexHeatmap这个做热图的R包的部分功能呈现出来,主要展示其做热图的一些参数。

Shiny程序我是放在https://www.shinyapps.io/,其是由RStudio开发的一个cloud,不需要自己有服务器就可以将shiny程序挂在上面。

然后我的程序的网址是https://anlan.shinyapps.io/complexheatmap/

流程:

UI

  1. 我使用了shinydashboard包的默认主题布局
  2. 使用sidebarMenu()函数形成2个ui界面,分别是Quickly visualize和Complex visualize,见https://rstudio.github.io/shinydashboard/structure.html
  3. 然后根据教程http://shiny.rstudio.com/articles/layout-guide.html将一些参数布置在ui界面上

Server

  1. 读取数据,赋予特定函数
  2. 读取来自ui的input,分别作为Heatmap()的参数来绘制热图,可以参考https://github.com/Bohdan-Khomtchouk/shinyheatmap/blob/master/shinyheatmap/server.r
  3. 输出热图到UI界面上,可参考同上
  4. 输出图片保存为各个格式的图片,可参考http://www.biotrainee.com/thread-1630-1-1.html

整体上是一件比较简单的事情,就是写起代码来有时会比较繁琐,我的代码放在https://github.com/kaigu1990/Shiny/tree/master/ComplexHeatmap

只要参考下别人的shiny代码,模仿下,一般就能形成一个简单的shiny的程序

热图可参考https://github.com/Bohdan-Khomtchouk/shinyheatmap/tree/master/shinyheatmap

DE(差异)分析可参考https://github.com/yan-cri/DEApp