想要将scanpy的h5ad文件转为rds文件,有一个很方便的包sceasy可以使用,安装简单,代码简易。
安装方式
# bioconda package:conda install -c bioconda r-sceasy# R package:devtools::install_github("cellgeni/sceasy")#额外需要安装的依赖包
if (!requireNamespace("BiocManager", quietly = TRUE))install.packages("BiocManager")BiocManager::install(c("LoomExperiment", "SingleCellExperiment"))install.packages('reticulate')
R语言脚本
Seurat to AnnData
sceasy::convertFormat(seurat_object, from="seurat", to="anndata",outFile='filename.h5ad')
AnnData to Seurat
sceasy::convertFormat(h5ad_file, from="anndata", to="seurat",outFile='filename.rds')
Seurat to SingleCellExperiment
sceasy::convertFormat(seurat_object, from="seurat", to="sce",outFile='filename.rds')
SingleCellExperiment to AnnData
sceasy::convertFormat(sce_object, from="sce", to="anndata",outFile='filename.h5ad')
SingleCellExperiment to Loom
sceasy::convertFormat(sce_object, from="sce", to="loom",outFile='filename.loom')
Loom to AnnData
sceasy::convertFormat('filename.loom', from="loom", to="anndata",outFile='filename.h5ad')
Loom to SingleCellExperiment
sceasy::convertFormat('filename.loom', from="loom", to="sce",outFile='filename.rds')
批量处理的代码
library(Seurat)
library(stringr)
library(sceasy)
library(reticulate)
loompy <- reticulate::import('loompy')use_condaenv('EnvironmentName') #使用的python路径或者conda中python的路径#h5ad转rds文件,文件夹下所有文件批量转换代码outdir = 'XXX/Glycine.max/'
setwd(outdir)
file_names <- list.files(path = outdir, pattern = "\\.h5ad$", full.names = FALSE)
for (i in 1:length(file_names))
{sample1 <- file_names[i]sample2 <- sub("\\..*", "", file_names[i])print(sample1)h5ad_file=str_c(sample1) #输入的h5文件路径out_file=str_c(outdir2,sample2,".rds")sceasy::convertFormat(h5ad_file, from="anndata", to="seurat", outFile=out_file)
}
记住需要添加use_condaenv的python路径,不然会使用默认的python,容易报错。报错如下图所示。use_condaenv('XXX/bin/python')
Error: PyType_GetFlags - /usr/lib64/python2.7/config/libpython2.7.so: undefined symbol: PyType_GetFlags
In addition: Warning message:
In py_initialize(config$python, config$libpython, config$pythonhome, :Python 2 reached EOL on January 1, 2020. Python 2 compatability will be removed in an upcoming reticulaterelease.