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

Snakemake规则typing与apply_qc冲突:Wildcard异常及歧义问题

Snakemake规则冲突问题解决方案

问题现象

  • 触发InputFunctionException:通配符被错误追加_qcpass后缀(如prrsv12变为prrsv12_qcpass),导致KeyError
  • 触发AmbiguousRuleException:typing和apply_qc规则均可生成output/typing/prrsv12_qcpass.csv
  • 尝试rules.<rule>.output语法及ruleorder未解决,错误随机出现;--debug-dag显示其他规则通配符带_qcpass,但apply_qc规则本身正常

解决方案

1. 修复通配符解析逻辑

问题根源是apply_qc输出的{samplename}_qcpass会被Snakemake反向解析,错误修改上游规则的通配符。需明确区分原始样本名与QC后缀:

rule apply_qc:
    input:
        typing=rules.typing.output,
        consensus=rules.polish_consensus.output,
        summary=rules.featurecounts.output.summary
    output:
        typing=f"{OUTPUT_FOLDER}/typing/{{samplename}}_qcpass.csv",
        consensus=f"{OUTPUT_FOLDER}/consensus/{{samplename}}_qcpass.fasta"
    script:
        "../scripts/apply_qc.py"

确保上游typing规则的输入输出仅使用原始{samplename}通配符,避免解析混淆。

2. 强制规则执行优先级

在Snakefile全局范围内添加ruleorder声明,明确apply_qc必须在typing之后执行,消除规则歧义:

ruleorder: typing > apply_qc

3. 调整临时文件设置

typing规则的temp()标记可能导致依赖解析异常,若无需临时文件可直接移除;若必须保留,需确保apply_qc的输入明确绑定typing的输出:

rule typing:
    input:
        f"{DATA_FOLDER}/vaccines.fasta",
        rules.polish_consensus.output
    output:
        # 移除temp()避免提前清理导致的依赖问题
        f"{OUTPUT_FOLDER}/typing/{{samplename}}.csv"
    script:
        "../scripts/typing.py"

4. 验证DAG解析

用以下命令检查通配符传递是否正确:

snakemake --dag | dot -Tpng > dag.png
# 或查看实际执行命令
snakemake --printshellcmds

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 16:40:01