两步法搞定:Python中的h5ad文件 转为R中的seurat对象
问题来源
AnnData对象(Python中)和Seurat对象(R中)分别是两个非常流行的单细胞RNA测序数据分析框架中的核心数据结构。
有很多工具可以完成python对象adata和R中seurat对象的转换,但是很多情况下,我们使用别人提供的r包来转换都会失败,就算是seurat自带的转换r包有时候也会报错。
转换失败的原因
版本不兼容:Seurat或AnnData的不同版本可能会引入新的功能或更改数据存储方式,导致转换工具无法正确处理最新或旧版格式的文件。
丢失的元数据:转换工具可能期望在源文件中存在特定的元数据信息。如果这些信息缺失或格式不正确,转换过程可能会失败。
不支持的数据类型:某些特定的数据类型或结构可能在一个框架中有良好的支持,而在另一个框架中则不是。例如,Seurat和AnnData在处理稀疏矩阵或复杂的细胞分群信息时可能会有所不同。
软件缺陷:所有软件都可能存在bug,即使是经过广泛使用和测试的软件包也不例外。某些转换问题可能是由于软件中未被发现或尚未修复的bug所导致。
通用的解决方案
不管是在r中还是python中 ,只是数据的存储结构不同而已。但是数据本身没有变化。
第一步,先导出python中的annadata主要数据
#python中导出数据
import scipy.sparse as sparse
import scipy.io as sio
import scipy.stats as stats
import numpy as np
import scanpy as sc
import os
all_data=sc.read_h5ad("./fibroblast.h5ad")
cellinfo=all_data.obs
geneinfo=all_data.var
mtx=all_data.X.T
cellinfo.to_csv("cellinfo.csv")
geneinfo.to_csv("geneinfo.csv")
sio.mmwrite("sparse_matrix.mtx",mtx)
!pwd
第二步,在R中读取导出的数据,并创建seurat对象
cellinfo=read.csv("/home/data/t040413/heart_muscle/item1_NF_DCM_HCM/fibroblast/cellinfo.csv",row.names = "X")
head(cellinfo)
geneinfo=read.csv("/home/data/t040413/heart_muscle/item1_NF_DCM_HCM/fibroblast/geneinfo.csv",row.names = "X");head(geneinfo)
#geneinfo=geneinfo[,c(2,3)]
head(geneinfo)
# counts=ReadMtx(mtx = "./sparse_matrix.mtx",
# cells = "./cellinfo.csv",
# features = "./geneinfo.csv")
counts=Matrix::readMM(file = "/home/data/t040413/heart_muscle/item1_NF_DCM_HCM/fibroblast/sparse_matrix.mtx")
head(counts)[,1:9]
dim(counts)
rownames(counts)=rownames(geneinfo)
colnames(counts)=rownames(cellinfo)
library(Seurat)
All.merge=CreateSeuratObject(counts = counts,project = "All.merge",meta.data = cellinfo)
dim(All.merge)
看完记得顺手点个“在看”哦!
作者:生信小博士