美文网首页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