在我参与发表我的第一篇植物单细胞文章中,我用Shiny开发了一个简单的单细胞可视化网站,目前已经运行了5年了,有上万的访问,唯一的不足就是太简陋。我一直想着能不能找个一个更好的工具进行展示,最近发现了一个工具,ShinyCell,https://github.com/SGDDNB/ShinyCell。
他的安装非常简单,就是安装如下的R包
reqPkg = c("data.table", "Matrix", "hdf5r", "reticulate", "ggplot2", "gridExtra", "glue", "readr", "RColorBrewer", "R.utils", "Seurat")
newPkg = reqPkg[!(reqPkg %in% installed.packages()[,"Package"])]
if(length(newPkg)){install.packages(newPkg)}# If you are using h5ad file as input, run the code below as well
# reticulate::py_install("anndata")reqPkg = c("shiny", "shinyhelper", "data.table", "Matrix", "DT", "hdf5r", "reticulate", "ggplot2", "gridExtra", "magrittr", "ggdendro")
newPkg = reqPkg[!(reqPkg %in% installed.packages()[,"Package"])]
if(length(newPkg)){install.packages(newPkg)}devtools::install_github("SGDDNB/ShinyCell")
然后,你读取你分析得到的Seurat文件,注意readySeu_rset.rds对应的是你使用Seura分析得到,并保存的Rds数据。接着,使用createConfig创建配配置,并用makeShinyApp制作shiny文件。
library(Seurat)
library(ShinyCell)
getExampleData() #案例数据
seu.obj = readRDS("readySeu_rset.rds")
scConf = createConfig(seu.obj )
makeShinyApp(seu.obj , scConf, gene.mapping = TRUE,shiny.title = "ShinyCell Quick Start")
makeShinyApp 可以需要修改的参数如下
- gex.slot和gex.assay 用于定义展示的表达量数据的位置,比如说Seurat可以选择"RNA" 还是 “integrated”
- gene.mapping: 一般是gene_id和gene symbol的对应关系。
- shiny.dir 输出路径,默认是当前目录下的shinyApp。
最后输出的文件夹里包括ui.R, server.R 以及一系列的数据,可以通过Rstudio打开该文件夹,然后点开ui.R或者server.R 就可以看到Run App,用于启动。
如果需要在Shiny Server中展示,需要额外安装一个shiny server, 以ubuntu为例,在服务器上运行如下命令
sudo apt-get install gdebi-core
wget https://download3.rstudio.org/ubuntu-18.04/x86_64/shiny-server-1.5.22.1017-amd64.deb
sudo gdebi shiny-server-1.5.22.1017-amd64.deb
此外,服务器的R至少需要配置如下R包
# 定义需要安装和加载的包列表
packages <- c("shiny", "shinyhelper", "data.table", "Matrix", "DT", "magrittr","ggplot2", "ggrepel", "hdf5r", "ggdendro", "gridExtra")# 安装未安装的包
install_all_packages <- function(packages) {new_packages <- packages[!(packages %in% installed.packages()[,"Package"])]if (length(new_packages)) install.packages(new_packages, dependencies = TRUE)
}# 调用函数安装任何未安装的包
install_all_packages(packages)# 测试:加载所有包
lapply(packages, library, character.only = TRUE)
接着,将输出的文件夹,例如shinyApp移动到/srv/shiny-server目录下, 你就可以通过浏览器访问对应的项目了,例如 http://服务器地址:3838/shiny-server
参考资料
- https://posit.co/download/shiny-server/