大家好,在下生信小白一名,现整理自己初学期间遇到的问题和解决方案,供大家参考,如若有大佬提供更好地建议或者补全解决方案,不胜感激!
对于出入门的小白来说,同时熟练的掌握python和R似乎比较困难,但是很多时候任务ddl和push又无法让我们及时地补全两种语言的熟练度,所以就往往需要进行两种语言文件的转换,从而更加得心应手地处理数据和使用算法。
首先明确单细胞组学中两种语言的不同文件形式,python分析主要使用scanpy,R分析则集中于Seurat,其中scanpy的文件格式为h5ad,Seurat文件格式为rds或rData。
Seurat文件转换成h5ad文件相对简单,有现成的包SeuratDisk。
#R
library('Seurat')
library('SeuratDisk')
#读取Seurat文件
data_R<-readRDS('data_dir')
SaveH5Seurat(data_R,filename="dir/data_R")
#在目录获得h5ad文件
Convert("dir/data_R",dest="h5ad")
#python
#读取h5ad文件importscanpyasscdata_py=sc.read_h5ad('dir/*.h5ad')`
以上方法对于正常保存的raw data一般都可以使用,但是如果对seurat文件进行了其他数据处理,可能会出现报错。
h5ad文件转Seurat文件稍微复杂:
如果可以直接使用SeruatDisk包进行转换,是最好的结果
#直接获得h5Seurat文件
Convert("data.h5ad", dest = "h5seurat", overwrite = F)
但是我自己和网络上较多人都经历过报错
Error: Missing required datasets 'levels' and 'values'
此项错误的解决方法有
library(rhdf5)
data = LoadH5Seurat('data.h5seurat',meta.data = FALSE, misc = FALSE)
data[["mised_meta_value"]] <- h5read("data", "/obs/mised_meta_value")
如果使用这个方法仍然报错,我个人成功的方法为
#Python
import h5py
data_R=pd.DataFrame(data=data_py.X.todense(),index=data_py.obs_names,columns=data_py.var_names)
data_R.to_hdf("data_R.h5","data_R")
meta_data=pd.DataFrame(data=data_py.obs)
meta_data.to_csv('metadata_data_py.tsv',sep="\t")
#R
data_R <- h5read("dir/data_R.h5","data_R")
data_process <- data_R$block0_values
rownames(data_process) <- data_R$axis0
colnames(data_process) <- data_R$axis1
data_process <- Matrix(data_process, sparse = TRUE)
meta_data <- read.table('dir/metadata_data.tsv',sep="\t",header=T,row.names=1)
data_final <- CreateSeuratObject(dpa_process,assay='RNA',meta.data=meta_data)
如果以上方法还是不能解决转换问题,则可能需要选择其他方法进行转换了。
欢迎大家补充方法!