我在Snakemake中创建了一个工作流程,当我想要运行单个规则时遇到了问题。实际上,它为我运行那些输出是该规则输入的规则,即使这些规则已经在之前创建过了。
例如:
rule A:
input A
output A
rule b:
input b = output A
output b
rule c:
input c = output b
output c
我该如何只运行规则 C?
我在Snakemake中创建了一个工作流程,当我想要运行单个规则时遇到了问题。实际上,它为我运行那些输出是该规则输入的规则,即使这些规则已经在之前创建过了。
例如:
rule A:
input A
output A
rule b:
input b = output A
output b
rule c:
input c = output b
output c
我该如何只运行规则 C?
snakemake --allowed-rules c
Snakemake会尝试重新运行与您下游规则相关联的输入/输出链中的上游规则,如果上游规则的输出文件已更改(包括如果它们已被重新创建但内容没有更改)。这种行为使Snakemake具有可重复性,但如果您正在尝试调试管道的特定部分并且不想运行所有中间步骤,则可能不是理想的。
请参见此讨论: https://bitbucket.org/snakemake/snakemake/issues/688/execute-specified-rule-only-and-not
--until
才能运行规则C,只需运行snakemake -R --until c
即可。 如果存在假设的依赖关系,例如共享的输入或输出路径,则会强制您在不使用--until
的情况下运行上游规则。始终先以-n
进行干运行。你只需要运行:
snakemake -R b
要预先查看这将会做什么:
snakemake -R b -n
-R 选中一个规则(以及它所依赖的所有规则!),-n 进行“干运行”,只会输出不执行。
我认为 "--force" = "-f" 是这里所要求的:
snakemake --force c
snakemake -f c
--until
参数进行实验。在snakemake的帮助文档中,--until TARGET [TARGET ...], -U TARGET [TARGET ...]
可以运行管线直到达到指定的规则或文件。仅运行指定规则或文件依赖的作业,不运行同级DAGs(有向无环图)。 - Russ Hyde