我已经在snakemake中创建了一个工作流程,当我只想运行一条规则时遇到了一个问题。确实,对于我来说,它运行的是规则,其中输出是规则的输入,即使之前已经创建过这些规则。
示例:
rule A:
input A
output A
rule b:
input b = output A
output b
rule c:
input c = output b
output c
如何仅运行规则C?
答案 0 :(得分:3)
如果存在依赖关系,我发现如果要运行规则C,只需运行--until
,只有snakemake -R --until c
可以工作。如果假设存在依赖性,例如共享的输入或输出路径,它将迫使您运行上游规则,而无需使用--until
。总是先运行-n
进行空运行。
答案 1 :(得分:1)
您刚刚运行:
snakemake -R b
要提前查看此操作,
snakemake -R b -n
-R选择一个规则(以及它的所有相关规则!),-n执行“空运行”,它只是打印不使用-n会执行的操作。
答案 2 :(得分:1)
您可以使用--allowed-rules选项。
snakemake --allowed-rules c
如果上游规则的输出文件已更改(包括是否已重新创建但内容已包含在内),Snakemake将尝试重新运行由输入/输出链链接到下游规则的上游规则。没有改变)。这种行为使Snakemake具有可重现性,但是如果您要调试管道的特定部分并且不想运行所有中间步骤,则可能不希望这样做。
请参阅以下讨论: https://bitbucket.org/snakemake/snakemake/issues/688/execute-specified-rule-only-and-not