如何在snakemake中只运行一个规则

Bio*_*nil 6 snakemake

我在snakemake中创建了一个工作流程,当我只想运行一个规则时遇到了问题。事实上,它为我运行规则,其中输出是我规则的输入,即使这些规则之前已经创建。

例子 :

rule A:
 input A
 output A

rule b:
 input b = output A
 output b

rule c:
 input c = output b
 output c
Run Code Online (Sandbox Code Playgroud)

我怎样才能只运行规则 C?

小智 7

您可以使用 --allowed-rules 选项。

snakemake --allowed-rules c
Run Code Online (Sandbox Code Playgroud)

如果上游规则的输出文件已更改(包括如果它们已重新创建但内容尚未更改),Snakemake 将尝试重新运行由输入/输出链链接到下游规则的上游规则改变)。这种行为使 Snakemake 具有可重复性,但如果您尝试调试管道的特定部分并且不想运行所有中间步骤,则可能不希望这样做。

请参阅此讨论: https://bitbucket.org/snakemake/snakemake/issues/688/execute-specified-rule-only-and-not


jim*_*imh 6

如果存在依赖关系,我发现只有--until在您想运行规则 C just run时才有效snakemake -R --until c。如果存在假定的依赖关系,例如共享输入或输出路径,它将强制您运行上游规则而不使用--until. 始终先运行并-n进行空运行。


Fre*_*eek 5

你只需运行:

snakemake -R b
Run Code Online (Sandbox Code Playgroud)

提前看看这会做什么:

snakemake -R b -n
Run Code Online (Sandbox Code Playgroud)

-R 选择一个规则(以及它的所有依赖规则!),-n 进行“试运行”,它只是打印没有 -n 时会执行的操作。

  • 有没有办法在不运行依赖规则的情况下运行规则?例如,如果我在snakemake之外生成输入文件,我可以运行将这些文件作为输入的特定规则吗? (6认同)
  • 这对我不起作用。我发现——直到效果更好。 (2认同)