single cell - 视频 R

从AnnData到Seurat-1:最基础最稳定的转换及理解Se

2022-11-14  本文已影响0人  Yayamia

因为想用NicheNet,所以终于下定决心攻克从AnnData到Seurat的转换了

因为我基本上用Scanpy那一套分析得比较多,Seurat用得很少很少,所以打算顺便学习一下Seurat那一套。感觉还是灵活使用两种方法会更有利于分析。

关于AnnData和Seurat之间的转化,我试过很多包,比如SeuratDisk,scDioR,sceasy之类,但总是会有各种各样的问题,也想过要不要用Loom文件作为中间载体。

最终还是打算先用最基础的方法试一试,以及感觉还是要在理解Seurat的基础上在进行转换会更好。

一、最基础最稳定的转换

方法参考1
方法参考2(※)
方法参考3

即直接把AnnData拆分成barcodes.tsv.gz,features.tsv.gz,matrix.mtx.gz(coo_matrix格式的sparse 矩阵)和metadata.csv,然后读入Seurat

在保存matrix.mtx.gz后用R读取时出了一些问题
如:

Error in scan(file, nmax = 1, what = what, quiet = TRUE, ...) : 
  scan()需要'an integer', 而不是'0.0000000000000000e+00'
Error in readMM(paste0(save_dir, "/counts.mtx")) : 
  'readMM()' is not yet implemented for  representation 'array'

第一种报错astype('int')可以解决
第二种未能解决,因此直接保存csv格式的dataframe,在R中转为稀疏矩阵

data1 <- read.csv("/counts.csv", header = T, row.names = 1)

# csv矩阵转换成数据框
datan = data.frame(data1)

# 数据框转换成稀疏矩阵matrix
counts <- as(as.matrix(datan), "dgCMatrix")

后续步骤:

cellMeta<-read.csv(paste0(save_dir,'/counts_cellMeta.csv'))
head(cellMeta)
dim(cellMeta)

geneMeta<-read.csv(paste0(save_dir,'/counts_geneMeta.csv'))
dim(geneMeta)

head(geneMeta)
### Set the rownames and colnames
rownames(counts)<-cellMeta$Barcode
colnames(counts)<-geneMeta$GeneName

#Construct Seurat object
seo <- CreateSeuratObject(counts = t(counts), 
                          project = "min", 
                          min.cells = 3, 
                          min.features = 200)
### Set the meta data
seo@meta.data<-cbind(cellMeta,seo@meta.data)
rownames(seo@meta.data)<-colnames(seo)

二、理解Seurat对象的格式

至此,我们重新构建了Seurat的对象

……话虽如此,Seurat对象到底是什么呢,和AnnData又有什么区别呢

关于AnnData的理解

周运来老师的文章,非常认同我们应该以数据库的思维处理单细胞

SingleCellExperiment数据结构,非常清晰的图,可以比对AnnData的结构理解

关于Seurat数据结构的理解

对Seurat对象的主要操作

上一篇 下一篇

猜你喜欢

热点阅读