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

在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参数明确指定保存路径。

两种修正方式:

  1. 基于索引访问输出的写法:
save(dds, file = snakemake@output[[2]])
  1. 基于命名输出的写法(推荐,可读性更强):
    规则中已经为输出文件命名rdata,可以直接通过命名属性访问,代码更清晰:
save(dds, file = snakemake@output$rdata)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 19:22:21