Seurat Object 对象从V5 转化为V4

前言

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"

这样就说明转化成功啦~


学习更多生信知识,请持续关注**【生信摆渡】**。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值