运行R脚本终止提示无法读取snp_annot.chrNA.txt文件如何解决
报错根因分析
- 报错的直接诱因是拼接snp注释文件名时,
chrom变量取值为NA,生成了不存在的文件snp_annot.chrNA.txt,程序读取文件失败后终止运行。 - 最高发的原因是你在脚本第一行引入的外部脚本
../code/gtex_v7_nested_cv_elnet.R内部也调用了commandArgs()读取运行参数,直接覆盖了你当前脚本中定义的argv变量,导致你读取argv[1]时拿到空值,赋值给chrom后变为NA。 - 也存在小概率的低级错误场景:你修改参数读取逻辑后没有保存脚本就执行,运行的仍是旧版本代码(旧版本中
chrom对应argv[2],你只传了1个参数所以取值为NA),或是运行环境异常导致参数没有正常传入。
修复方案
- 先做快速排查:在
argv <- commandArgs(trailingOnly = TRUE)代码行下方新增打印逻辑,确认参数传入情况:
运行脚本后如果输出参数值为NA,即可确认是参数读取环节出现问题。print(paste0("传入参数总数:", length(argv), " 第一个参数值:", argv[1])) - 调整代码顺序,避免参数被覆盖:把外部脚本引入的逻辑移到参数读取、变量赋值之后:
# 先处理当前脚本的参数读取和变量定义 "%&%" <- function(a,b) paste(a,b, sep='') argv <- commandArgs(trailingOnly = TRUE) chrom <- argv[1] # 再引入外部依赖脚本 source("../code/gtex_v7_nested_cv_elnet.R") - 确认执行的是修改后的最新脚本,执行命令
Rscript gtex_tiss_chrom.R 1的路径和参数无错误。 - 若仍有问题可临时写死变量测试:将
chrom <- argv[1]改为chrom <- "1",运行后如果不再报文件名错误,即可完全确认是参数读取环节的问题,再针对性排查即可。
内容的提问来源于stack exchange,提问作者Rhea Bedi
相关产品推荐
相关产品推荐

