将R环境下的Seurat RDS格式数据转化成为到python环境下scanpy的anndata格式

无论是单细胞、空间组还是ATAC的数据,有时由于下游分析的需求或可视化的需求,同时由于python的运算速度的优势,目前越来越多单细胞分析的工具开始在python环境下开发(scanpy/spGCN/scVelo……),但是大家大多都习惯了R的分析环境(Seurat/Harmony/Monocle3……),所以我们经常需要在不同的环境中运行同一个分析对象,这所以涉及到的数据类型的转变就非常关键了。

想直接想找工具将RDS转为python可读数据对象的包,目前还没有……(如果有大佬可以开发一下)。

目前所以从数据本身出发有三种方式,总结自目前网络上一些可行的方法:

1,提取矩阵(稀疏/稠密)和特征信息(metadata),手动构筑anndata(单细胞分析时python中的一种数据结构,具体了解可以看一下:https://www.jianshu.com/p/9b057e105c42,写得挺好)就好。前提是对R的S4对象和python的anndata对象有基础的认识,就可以搞定,这是最本质也是最万能的方法,除了门槛高。

2,存储的时候就注意,不要保存成rds,或者已经这样保存了也无所谓,可以读入再重新存:
(1)存储成h5ad格式。Seurat数据写成h5需要借助包SeuratDisk: https://github.com/mojaveazure/seurat-disk
从R环境下Seurat的对象保存成h5ad的格式:

library('SeuratDisk')
DefaultAssay(sdata) <- "Spatial" #选择你要保存的Assay
SaveH5Seurat(sdata, filename = "data.h5Seurat",overwrite = TRUE)
Convert("data.h5Seurat", dest = "h5ad",overwrite = TRUE)

然后用python的anndata包/scanpy包直接读入就好,因为h5ad本来就是单细胞在跑一python环境中分析最基础的格式,对标R中的seurat对象或sce对象

adata=anndata.read('./data.h5ad') #用anndata
adata=scanpy.read('./data.h5ad')  #用scanpy

这个方法可以具体参考:https://www.jianshu.com/p/c438d545f696 他写得更加详细一点

(2)Seurat官方设置loom格式也是可行方式之一:
参见:https://www.jianshu.com/p/147da295fc34
将Seurat对象转为loom:

#读入seurat处理后的rds文件
library(Seurat)
library(SeuratDisk)
library(loomR)
sdata <- readRDS(file = "./seurat_project.rds")
# 在R环境下将seurat对象转换为loom文件
sdata.loom <- as.loom(x = sdata, filename = "./data.loom", verbose = FALSE)
# Always remember to close loom files when done
sdata.loom$close_all()

在python环境下读入loom,成为adata:

import scanpy as sc
adata = sc.read_loom("./data.loom", cleanup=False, X_name='spliced', obs_names='CellID', var_names='Gene', dtype='float32'))

总而言之,经个人使用和实际操作来说,第二个存储成为h5ad的方法时最好用的、也最友好,除了只能保存一个assay之外,就都没问题,但是如果许多保存多个assay成为anndata中的多个layer,这就的用手动的方法了。

版权声明:
作者:Mr李
链接:https://www.techfm.club/p/48245.html
来源:TechFM
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>