作者 | 周运来
男,
一个长大了才会遇到的帅哥,
稳健,潇洒,大方,靠谱。
一段生信缘,一棵技能树,
一枚大型测序工厂的螺丝钉,
一个随机森林中提灯觅食的津门旅客。
在单细胞数据分析时,常常用到Seurat(https://satijalab.org/seurat/install.html)这个R语言包。Seurat 分析流程基本涵盖了单细胞分析中的所有常见分析方法,包括filtering,tSNE,UMAP降维及可视化等,还有一个重量级功能就是矫正不同实验之间的批次效应。同时,Seurat团队也在积极对其进行扩展和升级。这不,今年4月份正式推出3.0,在8月份又推出3.1,其实3x版本之间的差异是比较小的。真正困惑我们的是2x 与3x 之间差别:
我们知道他是在往好的方向来变,可是Seurat2依然有他的一些优点,简单对比一下:
那么,折衷的方案就是同时安装 Seurat 2和 Seurat 3的包,通过数据格式整理把2x和3x的优点都利用起来。
不管是在Linux还是Windows里面,均可采取的办法就是:
将Seurat 2和 Seurat 3 安装在不同的 library 里面。
先查看当前的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’
可以参照官网给的示例来安装,因为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生成的对象不能直接用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的对象,如何用它来创建一个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)
所以懂了这对象的数据结构后,就可以按照自己的意愿做数据分析了。
我该用哪个版本的?
把这个R包的说明文档打印出来一个一个对照学习。祝大家学习愉快。
注 | 参考 在linux中用同一个版本的R 同时安装 Seurat2 和 Seurat3的教程(https://www.jb51.net/article/167941.htm)