今天遇到很奇怪的问题,就是我用scanpy1.9.1的环境保存的h5ad的文件,在scanpy1.7.2里的环境里发现读取不了,会发生错误
解决办法:保证scanpy1.7.2中的anndata的版本(0.7.6)和scanpy1.9.1中的anndata中的版本(0.8.0)一致即可,我采取的做法是首先卸载scanpy1.9.1中的anndata,然后安装anndata对应的anndata版本即可
但是今天又遇到这么个问题就是说我的环境就是anndata0.7.6的,因为python环境是3.6.10,我还无法将anndata升级到0.8.0,因为python3.6.10支持的最高版本是anndata0.7.8, 那么有什么办能把anndata0.8.0下的h5ad转变成0.7.6环境下可以读取的anndata,其实是有办法的
首先我的base环境是python3.8.8,可以安装anndata0.7.6和anndata0.8.0的两个版本,那么我采取以下的方式,首先在anndata0.8.0的环境中,使用sceasy库将h5ad转换成rds,然后卸载掉base环境中anndata0.8.0,安装anndata 0.7.6,然后使用sceasy库将rds重新转换成h5ad,那么这个新生成的h5ad就是可以用python3.6.10的anndata的0.7.6读取了
首先在R中安装好sceasy包
devtools::install_github("cellgeni/sceasy")
注意还有reticulate包,但是注意这里的reticulate包的虚拟环境里也需要安装包
在R中,需要安装anndata
打开rstudio,输入
library(reticulate)
py_install("anndata")
最终在该R对应的kernel中输入
library(sceasy)
h5ad_file="/Users/xiaokangyu/Desktop/dataset/heart/adata_clean.h5ad"
#use_condaenv('base')
sceasy::convertFormat(h5ad_file, from="anndata", to="seurat",
outFile='heart.rds')
就可以将scanpy中的数据转换成rds,结果如下
注意此时的环境
但是转换的时候,本地显示内存不足,这个转换还是得到服务器做
library(reticulate)
use_condaenv("scDML_test1")
library(sceasy)
library(Seurat)
read_file='/data/wangdongxue/yxk/dataset/heart/heart.rds'
seurat_object=readRDS(read_file)
sceasy::convertFormat(seurat_object, from="seurat", to="anndata",outFile='heart.h5ad')
这样转换就可以了