在R脚本中使用Snakemake变量时出现对象未找到错误
Snakemake中R脚本save函数调用错误排查
问题背景
我编写了如下Snakemake规则deseq2:
rule deseq2: input: salmon=expand("salmon/{sample}/quant.sf", sample=SAMPLES) output: xlsx="deseq2/deseq2_diff_trx.xlsx", rdata="deseq2/dds.Rdata", params: map_with, genome, gtf, log: "logs/deseq2/deseq2.log" conda: "envs/deseq2.yml" threads: config["resources"]["deseq2"]["cpu"] resources: runtime=config["resources"]["deseq2"]["time"] script: "scripts/deseq2.R"
在对应的R脚本中,使用snakemake@params[[1]]等语句访问参数时无报错,但执行save(dds, snakemake@output[[2]])时,出现错误:
Error in save(dds, snakemake@output[[2]]) : object ‘snakemake@output[[2]]’ not found
打印snakemake变量可见output[[2]]对应路径存在,且调试加载工作区时能正常访问该变量,请问我哪里操作有误?
错误原因与解决方法
问题出在save()函数的语法使用上:
save()函数默认的位置参数是要保存的对象名称,你直接传入路径字符串snakemake@output[[2]],R会误将其当作对象名去查找,导致报错。- 正确做法是通过
file参数明确指定保存路径。
两种修正方式:
- 基于索引访问输出的写法:
save(dds, file = snakemake@output[[2]])
- 基于命名输出的写法(推荐,可读性更强):
规则中已经为输出文件命名rdata,可以直接通过命名属性访问,代码更清晰:
save(dds, file = snakemake@output$rdata)
内容的提问来源于stack exchange,提问作者justinian482
相关产品推荐
相关产品推荐

