前言
Seurat V5造成的问题又多了一个(恼
今天在处理客户发我的RDS的Seurat对象时,总是报各种莫名其妙的错误,就是从来没见过的错误。
谷歌后各种报错原因都指向一点:用V5的SeuratObject处理V4的文件。
造成的结果就是,V4的代码V5可能用不了,且无法正常merge合并不同版本的Seurat对象。
区分是V4还是V5的方法为:
obj = readRDS("sce.anno.rds")
class(obj@assays$RNA)
# [1] "Assay5"
如果像我一样显示Assay5,则为V5,如果为Assay,则为V4。
鉴于Seurat V5的各种不兼容问题,我仍然使用的是V4版的Seurat和SeuratObject,但这次客户使用的显然是V5版的,如果再让客户把原始数据发给我我再用V4的代码跑一遍势必要浪费很多时间。
既然数据都是一样的只是结构不同,那应该可以进行转换吧。
同样谷歌了一下,还真的可以,在Github和优快云上找到了答案,这里详细记录一下。
开始转换
首先,你需要准备一个V5的环境,因为原始数据是V5的,这样才能正常读入。
但原本的V4的环境肯定不能被覆盖,所以我们要另外新建一个library库,用于安装V5的R包。
你目前的库:
.libPaths()
# "C:/software/R-4.4.1/library"
新建一个库,并指定这个库:
lib_V5 = paste0(.libPaths(), "_V5")
dir.create(lib_V5)
.libPaths(lib_V5)
.libPaths()
# [1] "C:/software/R-4.4.1/library_V5" "C:/software/R-4.4.1/library"
下面开始安装V5的Seurat:
install.packages('Seurat')
dir(lib_V5)
# [1] "Seurat" "SeuratObject"
packageVersion("Seurat")
# [1] '5.2.1'
packageVersion("SeuratObject")
# [1] '5.0.2'
这样就安装成功了。
之后执行下面的代码并导出就行了:
library(Seurat)
obj[["RNA3"]] <- as(object = obj[["RNA"]], Class = "Assay")
DefaultAssay(obj) <- 'RNA3'
obj[['RNA']]<-NULL
obj <- RenameAssays(obj,assay.name = 'RNA3',new.assay.name = 'RNA')
save(obj, file = "sce.anno_V4.rds")
接下来检验一下,关闭R,重新载入V4的Seurat:
library(Seurat)
# packageVersion("Seurat")
# [1] '4.4.0'
obj = readRDS("sce.anno_V4.rds")
class(obj@assays$RNA)
# [1] "Assay"
这样就说明转化成功啦~
学习更多生信知识,请持续关注**【生信摆渡】**。