Seurat2与Seurat3兼容与切换

在单细胞数据分析时,常常用到Seurat这个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 :

> .libPaths()
[1] "D:/R-3.5.1/library"

我把新版本的seurat(3x)装在这个路径下,这个很好装,因为托管在了CRAN上面:

# Enter commands in R (or R studio, if installed)
install.packages('Seurat')
library(Seurat)

当然可以在install.package里面指定安装的路径,也可以通过.libPaths()去修改默认的安装路径。安装后:

> packageVersion("Seurat")
[1] ‘3.1.0’
安装2x

可以参照官网给的示例来安装,因为3x与2x的名称一样都叫Seurat就不能装在同一个library路径下,所以要改变安装路径。同比之下,今年monocle升级后,直接叫monocle3了,它就可以安装在同一个路径下。

# Install the devtools package from Hadley Wickham
install.packages('devtools')
# Replace '2.3.0' with your desired version

.libPaths("D:/R-3.5.1/library2")
devtools::install_version(package = 'Seurat', version = package_version('2.3.0'))   #lib='D:/R-3.5.1/library2'

加载的时候,为防止万一:

library(Seurat,lib.loc = 'D:/R-3.5.1/library2')
packageVersion("Seurat",lib.loc = 'D:/R-3.5.1/library2')
[1] ‘2.3.0’

在切换的时候,先去加载:

detach("package:Seurat",unload = T)
2x 与3x Seurat对象的区别

这直接导致了2x生成的对象不能直接用3来分析,反之亦然。

先来看看2x的对象结构:

detach("package:Seurat",unload = T)
.libPaths("D:/R-3.5.1/library2")

#source("https://z.umn.edu/archived-seurat")
#devtools::install_version(package = 'Seurat', version = package_version('2.3.0'))  #lib='D:/R-3.5.1/library2'
#?install_version
library(Seurat,lib.loc = 'D:/R-3.5.1/library2')
packageVersion("Seurat",lib.loc = 'D:/R-3.5.1/library2')

[1] ‘2.3.0’
pbmc_small@raw.data@ # count 矩阵
pbmc_small@data@i # 均一化之后的数据
pbmc_small@scale.data # 标准化之后的数据
pbmc_small@var.genes # 高变基因
pbmc_small@is.expr # 
pbmc_small@ident  # 分类信息
pbmc_small@meta.data # 元数据
pbmc_small@project.name # 项目名称

而 seurat 3x呢,是这样的:

detach("package:Seurat",unload = T)
.libPaths("D:/R-3.5.1/library")
.libPaths()

[1] ‘3.1.0’


library(Seurat,lib.loc = 'D:/R-3.5.1/library')
packageVersion("Seurat",lib.loc = 'D:/R-3.5.1/library')

3x可以分析多套数据,所以在结构上做了调整。

pbmc_small@assays$RNA@counts  # counts  矩阵
pbmc_small@meta.data # 元数据
pbmc_small@active.assay # 当前用的数据
pbmc_small@active.ident # 当前用的ident  
pbmc_small@graphs # 图数据
pbmc_small@neighbors # 临近数据
pbmc_small@reductions # 降维结果
pbmc_small@project.name # 项目名称

原来2x的对象放在了assays的里面:

不仅数据结构,函数名也变了,所以要清楚相应的函数以及数据结构,这样才能灵活运用3x和2x来挖掘单细胞转录组的数据。

2x to 3x

如果我已经有了一个2x的对象,如何用它来创建一个3x的分析对象呢?就是把矩阵从2x 用 3x的CreateSeuratObject传到3x里面。

2x 对象:

library(Seurat,lib.loc = 'D:/R-3.5.1/library2')
packageVersion("Seurat",lib.loc = 'D:/R-3.5.1/library2')
[1] ‘2.3.0’
Seurat2_obj<-pbmc_small

转化为3x对象:

detach("package:Seurat",unload = T)
.libPaths("D:/R-3.5.1/library")
.libPaths()

library(Seurat,lib.loc = 'D:/R-3.5.1/library')
packageVersion("Seurat",lib.loc = 'D:/R-3.5.1/library')
[1] ‘3.1.0’
mypbmc<-CreateSeuratObject(Seurat2_obj@raw.data)

所以懂了这对象的数据结构后,就可以按照自己的意愿做数据分析了。

把seurat v2 对象转化为seurat V3对象

其实 Seurat 团队考虑到了这一点,在3中提供了由2 到3转化的函数: -UpdateSeuratObject:

FAQ

> library(Seurat)  # 我是V3 
> mm <-readRDS("Seurat.old/mmm.rds")
> mm
An old seurat object
 19600 genes across 11700 samples
> newMM<-UpdateSeuratObject(mm)
Validating object structure
Ensuring keys are in the proper strucutre
Ensuring feature names don't have underscores
Object representation is consistent with the most current Seurat version
> newMM
newMM
> newMM
An object of class Seurat 
19600 features across 11700 samples within 1 assay 
Active assay: RNA (19600 features)
 2 dimensional reductions calculated: pca, tsne

最后

我该用哪个版本的?

  • 如果刚开始做数据分析,尽快用3x做吧,毕竟是升级版,功能多样,也更合理。

  • 如果已经用2x做过一段时间数据分析了,那就不要轻易换了。

  • 最好是两个版本的都能用的像我这么溜。

最后的最后

把这个R包的说明文档打印出来一个一个对照学习。祝大家学习愉快。



在linux中用同一个版本的R 同时安装 Seurat2 和 Seurat3的教程

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容