单细胞数据分析经常需要在R与python之间切换,前面介绍过不少工具可以用来将seurat与scanpy对象互转。虽然这些工具也可以转换格式,但跟今天介绍的工具比起来还是逊色不少。anndata2ri是一个python包,并且基于rpy2并且实现了R/python之间格式转换器,可以轻松完成SingleCellExperiment、seurat与scanpy对象之间的转换。了解rpy2功能的同学都知道,这个包可以实现在python里面轻松的调用R,也可以很方便地基于其中的转换器将R/python之间的数据格式来回转换。那么,基于此包实现一个单细胞数据格式的转换器可以给用户带来更多使用的自由空间。
加载需要的包和环境:
import scanpy as sc
import anndata2ri
import rpy2.robjects as robjects
from rpy2.robjects.conversion import localconverter
%load_ext rpy2.ipython
anndata2ri里面的转换器默认是转换SingleCellExperiment与scanpy对象,如果需要seurat对象可以转个弯,利用Seurat包的as.SingleCellExperiment将SingleCellExperiment转换为seurat对象。

由于anndata2ri基于rpy2,可以直接使用R里面的代码,所以读取格式来也是没有任何限制,相当nice:
%%R -o pbmc_sce
suppressPackageStartupMessages(library(Seurat))
pbmc <- readRDS('pbmc3k.rds')
pbmc_sce <- as.SingleCellExperiment(pbmc)
pbmc_sce
class: SingleCellExperiment
dim: 13714 2700
metadata(0):
assays(3): counts logcounts scaledata
rownames(13714): AL627309.1 AP006222.2 ... PNRC2.1 SRSF10.1
rowData names(0):
colnames(2700): AAACATACAACCAC AAACATTGAGCTAC ... TTTGCATGAGAGGC
TTTGCATGCCTCAC
colData names(8): orig.ident nCount_RNA ... seurat_clusters ident
reducedDimNames(2): PCA UMAP
mainExpName: RNA
altExpNames(0):
数据读取到python里面,再调用一下转换器,格式就轻松转为adata对象了,看起来so easy:
with localconverter(anndata2ri.converter):
adata = robjects.conversion.get_conversion().rpy2py(pbmc_sce)
adata
AnnData object with n_obs × n_vars = 2700 × 13714
obs: 'orig.ident', 'nCount_RNA', 'nFeature_RNA', 'seurat_annotations', 'percent.mt', 'RNA_snn_res.0.5', 'seurat_clusters', 'ident'
obsm: 'X_pca', 'X_umap'
layers: 'logcounts', 'scaledata'