scanpy结果转为seurat可处理对象
网上Seurat转scanpy的教程一抓一大堆,然鹅找遍全网都没找到一个靠谱的反向操作方法。唯一找到一个ReadH5AD用起来是这样的:
好吧,可能是大佬们都不需要反向操作,然而本菜鸡实在是用不习惯jupyter那个操作界面,所以就自己反向操作一波吧。。。
首先排除在jupyter notebook直接输出矩阵,毕竟十几二十万细胞的矩阵输出不是闹着玩的,既费时又费内存。所以,是时候祭出reticulate了(以下操作全程在Rstudio进行):
library(reticulate)
######加载python模块######
scanpy <- import("scanpy")
pandas <- import("pandas")
adata = scanpy$read('./matrix.h5ad') ###载入scanpy输出的h5ad文件
#######导出基因名和样本信息################
meta = adata$obs
gene <- adata$var
#############导出矩阵并转置,scanpy和Seurat的行列是反的#############
adata2 = adata$X
adata2 = adata2$T
此时你就得到了一个稀疏矩阵,然而是没有行名和列名的稀疏矩阵,seurat是不会接受这种输入文件的,像这样:
所以,我们需要给稀疏矩阵加个行名列名,像这样:
adata2@Dimnames[[1]] = rownames(gene)
adata2@Dimnames[[2]] = rownames(meta)
然后就可以转战Seurat了:
merge <- CreateSeuratObject(adata2)
merge <- AddMetaData(merge, meta)
写这么多其实简单封装一下就是一个函数的事情。然而我懒。就算了。