如何在不触发上游规则的前提下单独运行Snakemake的指定规则
Snakemake从指定规则开始运行不触发上游的解决方案
- 方案1:使用Snakemake 7.0+原生
--from参数
这个参数完全匹配你要的「从指定规则开始运行」的需求,只会执行指定规则及其所有下游规则,上游依赖的文件如果不存在直接报错,不会触发上游规则执行。
执行命令示例:# 先执行dry run确认只有B、C会被执行 snakemake --from B -n # 确认无误后实际运行 snakemake --from B - 方案2:低版本Snakemake使用
--allowed-rules参数
手动指定允许执行的规则列表,不在列表里的规则完全不会被触发,上游文件缺失时直接报错:snakemake --allowed-rules B C -n snakemake --allowed-rules B C - 方案3:临时标记高成本规则为已完成
如果你已经确认规则A的输出都存在,只是Snakemake误判需要重跑,可以先执行命令手动标记规则A的所有输出为最新状态,之后运行工作流就不会再触发规则A:snakemake -R A --touch
针对高成本规则容易被误触发的问题,可以在规则的输入中用
ancient()修饰符修饰输入文件,示例如下:rule A: input: ancient("{name}.in") output: "{name}.out" shell: "touch {input} {output}"加了
ancient()后,Snakemake只要检测到输出文件存在,就不会再检查输入文件的时间戳是否更新,直接判定规则不需要重跑,从根本上避免高成本规则被误触发。
内容的提问来源于stack exchange,提问作者Cornelius Roemer
相关产品推荐
相关产品推荐

