美文网首页single cell - 视频 R
从AnnData到Seurat-1:最基础最稳定的转换及理解Se

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

作者: Yayamia | 来源:发表于2022-11-14 22:05 被阅读0次

因为想用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的结构理解
  • AnnData是细胞为行基因为列,而Seurat里面是以基因为行和细胞为列,所以在做Expression matrix的时候别忘了转置。
  • 槽(slots):这些不同类型的数据都存储在sce对象的不同部分中,这些部分称为槽(slots)。每个槽中的数据可以通过以各自的槽(箭头)命名的访问器以编程方式访问,比如rowRanges指的是特征元数据(相当于AnnData中的.var),colData指的是样本元数据(相当于AnnData中的.obs),assay指的是数据(相当于AnnData中的.X),不同层的assay相当于AnnData的.layers

关于Seurat数据结构的理解

  • 对象操作
    ① 通过结构图上的@,$符号依次取(和AnnData的对比:adata.obs['group']
    ② 两个中括号操作,pbmc[[ ]]。
    这两种操作在引用Assays\Reductions的下属内容中无差别,meta.data时会输出不同的数据格式

对Seurat对象的主要操作

相关文章

网友评论

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

    本文链接:https://www.haomeiwen.com/subject/bysrxdtx.html