无论是单细胞、空间组还是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,这就的用手动的方法了。