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对象做过细胞子集提取、过滤操作,没有重新构建轨迹邻接图,会导致图的顶点列表和元数据存储的细胞列表不匹配,传入根细胞时找不到对应顶点。
解决方案
按优先级依次尝试以下操作:
- 显式传入根细胞名称而非数值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)) - 若上述操作无效,将igraph降级至1.3.5适配版本,卸载当前高版本igraph后安装指定版本,安装完成后重启R环境再运行分析流程即可。
- 若分析过程中做过细胞过滤、子集操作,先重新构建轨迹图再执行后续计算:
# 重新构建轨迹邻接图 cyt <- buildTree(cyt, dim.type = "umap", dim.use = seq_len(2)) # 再执行根细胞定义、伪时间计算步骤
内容的提问来源于stack exchange,提问作者Berengere
相关产品推荐
相关产品推荐

