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
相关产品推荐
相关产品推荐

