1、数据在不同环境中的兼容情况
目前V5版本的环境可以兼容V3版本的数据,但是V3环境中导入V5环境会报错(缺依赖包)。
目前有两种方式新建R对象数据CreateSeuratObject
和CreateAssayObject/CreateAssay5Object
,两者的区别在于第一个是需要先options(Seurat.object.assay.version = "v3")
指定生成的数据版本,而后者是直接根据函数的不同来指定。
# create v3 assays
options(Seurat.object.assay.version = "v3")
pbmc.counts <- Read10X(data.dir = "/brahms/hartmana/vignette_data/pbmc3k/filtered_gene_bc_matrices/hg19/")
pbmc <- CreateSeuratObject(counts = pbmc.counts)
class(pbmc[["RNA"]])
# create v5 assays
options(Seurat.object.assay.version = "v5")
pbmc.counts <- Read10X(data.dir = "/brahms/hartmana/vignette_data/pbmc3k/filtered_gene_bc_matrices/hg19/")
pbmc <- CreateSeuratObject(counts = pbmc.counts)
class(pbmc[["RNA"]])
# CreateAssayObject() and CreateAssay5Object()
# create a v3 assay
assay.v3 <- CreateAssayObject(counts = pbmc.counts)
# create a v5 assay
assay.v5 <- CreateAssay5Object(counts = pbmc.counts)
同时seurat V5也提供了V3和V5版本数据相互转换的方法:
# We can also convert (cast) between Assay and Assay5 objects with as().
# convert a v5 assay to a v3 assay
pbmc3k[["RNA3"]] <- as(object = pbmc3k[["RNA"]], Class = "Assay")
# convert a v3 assay to a v5 assay
pbmc3k[["RNA5"]] <- as(object = pbmc3k[["RNA3"]], Class = "Assay5")
2、数据结构变化
由于数据结构的变化,v5中使用的是layers,因此v5版本之前使用的例如seurat.obj@assays
提取数据的时候会出现错误。
这种报错的修改方式可以把从一层层数据结构中提取数据改成使用现有函数来提取数据(这种方式旧版本和新版本都可以兼容)。
可以替换的数据结构可以参考seurat官网的链接:https://satijalab.org/seurat/articles/essential_commands#seurat-object-data-access
# 比如在v3中的seurat.obj@assays$RNA@data,可改为
GetAssayData(object=seurat.obj, slot="data", assay=DefaultAssay(seurat.obj))
# 提取高变基因数据
# 比如v3中提取seurat.obj@assays$RNA@var.features,可改为
VariableFeatures(object = seurat.obj, assay="RNA")
3、分析结果变化
FindMarkers()
从seurat V4升级后就出现的一个结果变化,就是差异基因的分析结果表,由avg_logFC
改成了avg_log2FC
。因此如果后续代码中有使用这列进行过滤等操作,需要修改key值进行兼容。
除此之外,如果分析中没有找到marker基因,返回结果会是一个list,而不是NA。如果使用is.na(response)
进行识别会报错,可以改成all(is.na(response))
来识别,如下:
response <- FindMarkers(object = seurat.obj, ident.1 = "comparison", ident.2 = "control", verbose = FALSE, test.use = "wilcox", logfc.threshold = 0.25),
if(! all(is.na(response))){
...
}
FetchData()
新版本中提取umap数据的key值有变化,V3版本中是UMAP_1
、UMAP_2
,V5版本中改成了小写。tSNE没有变化。
AverageExpression()
V3版本中输出的直接是一个data.frame
结构,但是V5中变成了dgCMatrix
的结构,因此,如果想要data.frame,可以再加一层as.data.frame()
持续补充中......如有错误,欢迎大家指出~