R Markdown编织时报'object 'idx' not found' 手动运行正常如何解决
错误根源
- 未在Rmd文档内定义
idx变量:手动运行时代码继承全局环境中提前定义的idx变量,而R Markdown编织时会启动独立的空白R会话,无法读取全局环境的变量,因此触发未找到对象的报错。 - 代码存在笔误与逻辑问题:
- 计算M2组归一化表达矩阵时错误调用M1组的dds对象:
norm.ctsM2 <- counts(ddsM1, normalized=TRUE),会导致后续M2组的svaseq等分析全部用错数据 - 重复定义
ddsM2_2,前一次基于ddsM2_SV的运行结果会被后一次基于ddsM2[idx,]的结果覆盖 - 连续两次给
basemean赋值,M1组的计算结果会被M2组覆盖,属于无效代码
- 计算M2组归一化表达矩阵时错误调用M1组的dds对象:
修复步骤
- 补全
idx变量的定义,在首次使用idx的代码前添加过滤逻辑,示例如下(可根据你的实际过滤阈值调整):
# 示例过滤规则:保留至少在3个样本中count值≥10的基因 idx <- rowSums(counts(ddsM1) >= 10) >= 3 # 若M2组需要单独的过滤规则,可单独定义idx2 idx2 <- rowSums(counts(ddsM2) >= 10) >= 3
如果idx是在文档前面的其他代码块中定义的,确认该代码块未设置eval=FALSE参数,保证编织时能正常运行生成idx。
- 修正笔误:将
norm.ctsM2 <- counts(ddsM1, normalized=TRUE)修改为:
norm.ctsM2 <- counts(ddsM2, normalized=TRUE)
- 清理冗余逻辑:
- 删除重复的
ddsM2_2定义段,即以下三行冗余代码:
ddsM2_SV <- ddsM2[idx,] ddsM2_2=DESeq(ddsM2_SV) resultsNames(ddsM2_2)
- 修正重复的
basemean赋值,可分别命名避免覆盖:
basemeanM1=rowMeans(counts(ddsM1_2, normalized=TRUE)) basemeanM2=rowMeans(counts(ddsM2_2, normalized=TRUE))
内容的提问来源于stack exchange,提问作者aj207
相关产品推荐
相关产品推荐

