下面把这个对象一次性讲透:
它来自 Monocle(注意不是 Monocle3!)的 CellDataSet 类(简称 CDS)。
CellDataSet 是一个 S4 对象,一共有 19 个 slot(官方文档说 18 个,但早期版本会多一个)。每个 slot 都存着单细胞轨迹分析不同阶段的关键信息。下面按“是什么 → 怎么取出来 → 什么时候用”的顺序逐条说明。


  1. expressionData
    • 是什么:基因×细胞的 raw count 或 normalized 表达矩阵(稠密 matrix 或 sparse Matrix)。
    • 怎么取

    exprs(cds)                # 取表达矩阵
    exprs(cds) <- new_exprs   # 重新赋值
    
  2. phenoData
    • 是什么:细胞元数据(细胞名、批次、cluster、Pseudotime…)。
    • 怎么取

    pData(cds)                # data.frame
    pData(cds)$Cluster        # 取某一列
    
  3. featureData
    • 是什么:基因注释(gene_short_name、gene_biotype…)。
    • 怎么取

    fData(cds)                # data.frame
    
  4. reducedDimS / reducedDimW / reducedDimA / reducedDimK
    • 是什么:不同降维结果
    – S:t-SNE(2D/3D)
    – W:diffusion map(Reversed graph embedding 用)
    – A:ICA(早期版本)
    – K:DDRTree 的 latent space(2D,轨迹主空间)
    • 怎么取

    reducedDimS(cds)          # 矩阵 2×nCells
    reducedDimK(cds)          # 2×nCells,画轨迹图就用它
    
  5. minSpanningTree
    • 是什么:一个 igraph 对象,存 MST 的边、权重、节点名。
    • 怎么取

    cds@minSpanningTree       # 直接@
    plot_spanning_tree(cds)   # 高层接口
    
  6. cellPairwiseDistances
    • 是什么:细胞×细胞距离矩阵(通常用 Reversed graph embedding 算出的)。
    • 怎么取

    cds@cellPairwiseDistances
    
  7. genePairwiseDistances
    • 是什么:基因×基因距离矩阵(做基因聚类时用)。
    • 怎么取

    cds@genePairwiseDistances
    
  8. dispersionTable
    • 是什么:mean-dispersion 拟合表(做负二项建模前计算的)。
    • 怎么取

    cds@dispersionTable
    
  9. fitModels / modelFormulaStr
    • 是什么:负二项 GLM 的拟合结果和公式。
    • 怎么取

    cds@fitModels
    cds@modelFormulaStr
    
  10. expressionFamily
    • 是什么:VGAM 的 family 对象,告诉 Monocle 用负二项还是 tobit 等。
    • 怎么取

    cds@expressionFamily
    
  11. lowerDetectionLimit / upperDetectionLimit
    • 是什么:表达量阈值(如 0.1)用于定义“检测到/未检测到”。
    • 怎么取

    cds@lowerDetectionLimit
    
  12. cellNames / geneNames
    • 是什么:细胞/基因 ID 向量,冗余但方便。
    • 怎么取

    cds@cellNames
    cds@geneNames
    
  13. logLikelihood / numCells / numGenes
    • 是什么:拟合 log-likelihood 及细胞/基因数。
    • 怎么取

    cds@logLikelihood
    
  14. 其余 slot(略常用)
    – DIMESlot(早期版本)
    – paramsSlot(内部参数)
    – featureNames(同 geneNames)


快速索引表(“我要拿什么?”)

任务场景 推荐函数/语法
查看表达矩阵 exprs(cds)
查看细胞注释 pData(cds)
查看基因注释 fData(cds)
画 t-SNE plot_cell_trajectory(cds, color_by="Cluster")
画 DDRTree 轨迹 plot_cell_trajectory(cds, reduction_method="DDRTree")
取 DDRTree 的 2D 坐标 reducedDimK(cds)
取 MST 的 igraph cds@minSpanningTree
手动改表达矩阵 exprs(cds) <- as.matrix(new)
手动改细胞注释 pData(cds)$Time <- new_time

常见陷阱 & 提示

  1. 早期 Monocle 版本(2017 前后)的 CellDataSet 里,expressionFamily 的 slot 名是 fini1,新版 VGAM 把它改成了 fini,于是老对象在新 VGAM 下会报

    Not a validObject(): 没有名称为"fini1"的插槽
    

    解决:重新用 newCellDataSet() 生成,或用 updateObject() 升级对象。

  2. 如果只想把 CellDataSet 转成 Seurat:

    library(Seurat)
    seu <- as.Seurat(cds)      # Seurat ≥4.0 自带转换
    
  3. 保存 / 加载

    saveRDS(cds, "cds_monocle.rds")
    cds <- readRDS("cds_monocle.rds")
    

至此,你就能读懂并随意操作这个 CellDataSet 了。

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐