如何定位包含通配符的中间 Snakemake 规则
How to target intermediary Snakemake rule that contains wildcards
我有一个工作流程,对于这个问题非常简化,如下所示:
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
强制执行规则,然后 运行ning [=19] =],它注意到一些上游输入已经改变。但这需要了解生成的精确文件名,而仅了解规则会更好,因为它处于更高的抽象级别。
我以前没用过,但我想你想要:
snakemake -c 1 --forcerun intermediary_cheap
--forcerun [TARGET [TARGET ...]], -R [TARGET [TARGET ...]]
Force the re-execution or creation of the given rules
or files. Use this option if you changed a rule and
want to have all its output in your workflow updated.
(default: None)
我有一个工作流程,对于这个问题非常简化,如下所示:
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
强制执行规则,然后 运行ning [=19] =],它注意到一些上游输入已经改变。但这需要了解生成的精确文件名,而仅了解规则会更好,因为它处于更高的抽象级别。
我以前没用过,但我想你想要:
snakemake -c 1 --forcerun intermediary_cheap
--forcerun [TARGET [TARGET ...]], -R [TARGET [TARGET ...]]
Force the re-execution or creation of the given rules
or files. Use this option if you changed a rule and
want to have all its output in your workflow updated.
(default: None)