Seurat2与Seurat3兼容与切换
男,
一个长大了才会遇到的帅哥,
稳健,潇洒,大方,靠谱。
一段生信缘,一棵技能树,
一枚大型测序工厂的螺丝钉,
一个随机森林中提灯觅食的津门旅客。
在单细胞数据分析时,常常用到Seurat(https://satijalab.org/seurat/install.html)这个R语言包。Seurat 分析流程基本涵盖了单细胞分析中的所有常见分析方法,包括filtering,tSNE,UMAP降维及可视化等,还有一个重量级功能就是矫正不同实验之间的批次效应。同时,Seurat团队也在积极对其进行扩展和升级。这不,今年4月份正式推出3.0,在8月份又推出3.1,其实3x版本之间的差异是比较小的。真正困惑我们的是2x 与3x 之间差别:
函数名称变了
seurat对象数据结构变了
整合分析的算法变了
我们知道他是在往好的方向来变,可是Seurat2依然有他的一些优点,简单对比一下:
已经有文献引用,应用成熟
我之前的数据就是用2x做的,文章都快发了,不能换做3x吧
CCA虽然速度慢,但是矫正用不同的单细胞实验平台进行试验带来的批次效应还是很好的
3x的算法虽然可以实现垮平台、器官、物种的整合,但是由于强大的矫正功能,对于肿瘤和外周血样本的矫正有时候却过了头。
Seurat 3的 findmarker 这个功能可以一次计算10万以上的细胞,而Seurat 2就不行
那么,折衷的方案就是同时安装 Seurat 2和 Seurat 3的包,通过数据格式整理把2x和3x的优点都利用起来。
不管是在Linux还是Windows里面,均可采取的办法就是:
将Seurat 2和 Seurat 3 安装在不同的 library 里面。
安装3x
先查看当前的library :
1> .libPaths()
2[1] "D:/R-3.5.1/library"
我把新版本的seurat(3x)装在这个路径下,这个很好装,因为托管在了CRAN上面:
1# Enter commands in R (or R studio, if installed)
2install.packages('Seurat')
3library(Seurat)
当然可以在install.package
里面指定安装的路径,也可以通过.libPaths()
去修改默认的安装路径。安装后:
1> packageVersion("Seurat")
2[1] '3.1.0’
安装2x
可以参照官网给的示例来安装,因为3x与2x的名称一样都叫Seurat就不能装在同一个library路径下,所以要改变安装路径。同比之下,今年monocle升级后,直接叫monocle3了,它就可以安装在同一个路径下。
1# Install the devtools package from Hadley Wickham
2install.packages('devtools')
3# Replace '2.3.0' with your desired version
4
5.libPaths("D:/R-3.5.1/library2")
6devtools::install_version(package = 'Seurat', version = package_version('2.3.0')) #lib='D:/R-3.5.1/library2'
加载的时候,为防止万一:
1library(Seurat,lib.loc = 'D:/R-3.5.1/library2')
2packageVersion("Seurat",lib.loc = 'D:/R-3.5.1/library2')
3[1] '2.3.0’
在切换的时候,先去加载:
1detach("package:Seurat",unload = T)
2x 与3x Seurat对象的区别
这直接导致了2x生成的对象不能直接用3来分析,反之亦然。
先来看看2x的对象结构:
1detach("package:Seurat",unload = T)
2.libPaths("D:/R-3.5.1/library2")
3
4#source("https://z.umn.edu/archived-seurat")
5#devtools::install_version(package = 'Seurat', version = package_version('2.3.0')) #lib='D:/R-3.5.1/library2'
6#?install_version
7library(Seurat,lib.loc = 'D:/R-3.5.1/library2')
8packageVersion("Seurat",lib.loc = 'D:/R-3.5.1/library2')
9
10[1] '2.3.0’
1pbmc_small@raw.data@ # count 矩阵
2pbmc_small@data@i # 均一化之后的数据
3pbmc_small@scale.data # 标准化之后的数据
4pbmc_small@var.genes # 高变基因
5pbmc_small@is.expr #
6pbmc_small@ident # 分类信息
7pbmc_small@meta.data # 元数据
8pbmc_small@project.name # 项目名称
而 seurat 3x呢,是这样的:
1detach("package:Seurat",unload = T)
2.libPaths("D:/R-3.5.1/library")
3.libPaths()
4
5[1] '3.1.0’
6
7library(Seurat,lib.loc = 'D:/R-3.5.1/library')
8packageVersion("Seurat",lib.loc = 'D:/R-3.5.1/library')
3x可以分析多套数据,所以在结构上做了调整。
1pbmc_small@assays$RNA@counts # counts 矩阵
2pbmc_small@meta.data # 元数据
3pbmc_small@active.assay # 当前用的数据
4pbmc_small@active.ident # 当前用的ident
5pbmc_small@graphs # 图数据
6pbmc_small@neighbors # 临近数据
7pbmc_small@reductions # 降维结果
8pbmc_small@project.name # 项目名称
原来2x的对象放在了assays的里面:
不仅数据结构,函数名也变了,所以要清楚相应的函数以及数据结构,这样才能灵活运用3x和2x来挖掘单细胞转录组的数据。
2x to 3x
如果我已经有了一个2x的对象,如何用它来创建一个3x的分析对象呢?就是把矩阵从2x 用 3x的CreateSeuratObject传到3x里面。
2x 对象:
1library(Seurat,lib.loc = 'D:/R-3.5.1/library2')
2packageVersion("Seurat",lib.loc = 'D:/R-3.5.1/library2')
3[1] '2.3.0’
4Seurat2_obj<-pbmc_small
转化为3x对象:
1detach("package:Seurat",unload = T)
2.libPaths("D:/R-3.5.1/library")
3.libPaths()
4
5library(Seurat,lib.loc = 'D:/R-3.5.1/library')
6packageVersion("Seurat",lib.loc = 'D:/R-3.5.1/library')
7[1] '3.1.0’
8mypbmc<-CreateSeuratObject(Seurat2_obj@raw.data)
所以懂了这对象的数据结构后,就可以按照自己的意愿做数据分析了。
最后
我该用哪个版本的?
如果刚开始做数据分析,尽快用3x做吧,毕竟是升级版,功能多样,也更合理。
如果已经用2x做过一段时间数据分析了,那就不要轻易换了。
最好是两个版本的都能用的像我这么溜。
最后的最后
把这个R包的说明文档打印出来一个一个对照学习。祝大家学习愉快。
注 | 参考
在linux中用同一个版本的R 同时安装 Seurat2 和 Seurat3的教程(https://www.jb51.net/article/167941.htm)