【发布时间】:2021-07-13 21:58:22
【问题描述】:
我有一个工作流程,对于这个问题非常简化,如下所示:
rule all:
input: multiext("final",".a",".b",".c",".d")
rule final_cheap:
input: "intermediary.{ext}"
output: "final.{ext}"
#dummy for cheap but complicated operation
shell: "cp {input} {output}"
rule intermediary_cheap:
input: "start.{ext}"
output: "intermediary.{ext}"
#dummy for cheap complicated operation
shell: "cp {input} {output}"
rule start_expensive:
output: "start.{ext}"
#dummy for very expensive operation
shell: "touch {output}"
第一步非常昂贵,接下来是两个复杂的步骤。
在我使用snakemake -c1 运行此工作流一次后,我想重新运行该工作流,但只是从中间规则开始。如何使用命令行标志实现此目标?
snakemake intermediary_cheap all 不起作用,因为 intermediary_cheap 包含通配符,即使包含 all 确实显示了所需通配符的值。
是否有命令行标志告诉snakemake 运行规则并忽略来自规则intermediary_cheap 的所有输出,例如snakemake all --forcerule=intermediary_cheap? (我发明了 --forcerule 标志,据我所知它并不存在。
我现在使用的解决方法是手动删除规则intermediary_cheap 的输出,然后使用--force 强制执行规则,然后运行rule all,这会注意到一些上游输入已更改。但这需要知道生成的精确文件名,而只知道规则会更好,因为它处于更高的抽象级别。
【问题讨论】:
标签: snakemake