You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言CytoTree运行runPseudotime报无效顶点ID错误如何解决

问题描述

在R环境中使用CytoTree包开展单细胞分析,该包调用igraph函数计算伪时间轨迹,目前已完成tSNE、UMAP、聚类分析步骤。
基于聚类结果手动定义根细胞,执行如下代码:

cyt<-defRootCells(cyt, root.cells=c(13,16,21))

该步骤运行正常,查看cyt对象的元数据可见已生成is.root.cells列,聚类13、16、21对应值为1,其余聚类对应值为0。
后续执行伪时间计算代码:

cyt<-runPseudotime(cyt, verbose=TRUE, dim.type="umap", dim.use=seq_len(2))

运行时出现如下报错:

Error in distances(g, v = root.cells) :
At core/graph/iterators.c:762 : Cannot create iterator, invalid vertex id, Invalid vertex id

相同分析流程在其他设备上可正常运行,需定位故障原因并解决。

故障原因
  • 版本兼容问题:这是最常见诱因。高版本igraph调整了顶点ID校验规则,旧版CytoTree在调用igraph的距离计算函数时,传入的根细胞标识和轨迹图内的顶点ID规则不匹配,旧版igraph对这类不匹配的容错性更高不会报错,新版会直接抛出无效顶点ID错误。
  • 传参逻辑误解:defRootCells的root.cells参数传入纯数值向量时,部分版本的CytoTree会默认将其识别为细胞的位置索引,而非聚类编号。传入的13、16、21会被错误标记为第13、16、21个细胞是根细胞,如果当前环境下分析对象经过细胞过滤、重排序,这些索引对应的顶点在轨迹图中不存在就会触发报错。
  • 对象状态异常:如果完成聚类后对cyt对象做过细胞子集提取、过滤操作,没有重新构建轨迹邻接图,会导致图的顶点列表和元数据存储的细胞列表不匹配,传入根细胞时找不到对应顶点。
解决方案

按优先级依次尝试以下操作:

  1. 显式传入根细胞名称而非数值ID,避免参数识别错误:
    # 提取聚类13、16、21对应的所有细胞名称
    root_cell_id <- rownames(cyt@meta.data)[cyt@meta.data$cluster %in% c(13,16,21)]
    # 用细胞名称重新定义根细胞
    cyt <- defRootCells(cyt, root.cells = root_cell_id)
    # 重新执行伪时间计算
    cyt<-runPseudotime(cyt, verbose=TRUE, dim.type="umap", dim.use=seq_len(2))
    
  2. 若上述操作无效,将igraph降级至1.3.5适配版本,卸载当前高版本igraph后安装指定版本,安装完成后重启R环境再运行分析流程即可。
  3. 若分析过程中做过细胞过滤、子集操作,先重新构建轨迹图再执行后续计算:
    # 重新构建轨迹邻接图
    cyt <- buildTree(cyt, dim.type = "umap", dim.use = seq_len(2))
    # 再执行根细胞定义、伪时间计算步骤
    

内容的提问来源于stack exchange,提问作者Berengere

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 05:39:18