子工作流和 includes 指令之间的实际区别是什么? [蛇形]
What is the practical difference between a sub-workflow and the includes directive? [Snakemake]
另一方面,在 Snakemake 文档中,如果您开发依赖于其输出的规则,includes
directive can incorporate all of the rules of another workflow into the main workflow and apparently can show up in snakemake --dag -n | dot -Tsvg > dag.svg
. Sub-workflows 可以在主工作流之前执行。
我的问题是:这两者到底有何不同?现在,我正在处理一个工作流,似乎我可以只使用 includes
并将输出的名称放在主工作流的 rule all
中。我什至可以将输出放在主工作流规则的 input
中,使 includes
工作流在该规则之前执行。此外,无论出于何种原因,我都无法想象包含子工作流的 DAG。子工作流提供了哪些 includes
指令不能做的事情?
我从未使用过子工作流,但在这种情况下,使用它们可能比 include
指令更方便。 (理论上,我认为你不需要 include
和 subworkflow
因为你可以把所有东西都写在一个巨大的 Snakefile 中,重点更多的是方便。)
假设您正在编写一个工作流,该工作流依赖于已发表作品(或您之前的项目)的结果文件。作者没有制作 public 您需要的文件,但他们提供了一个 snakemake 工作流程来生成它们。他们的 snakemake 工作流程可能非常复杂,您需要的文件可能只是中间步骤。因此,您无需理解所有工作流程并将其解析为您自己的 include
指令,而是使用 subworkflow
生成所需的文件。例如:
subworkflow jones_etal:
workdir:
"./jones_etal"
snakefile:
"./jones_etal/Snakefile"
rule all:
input:
'my_results.txt',
rule one:
input:
jones_etal('from_jones.txt'),
output:
'my_results.txt',
...
include
没有 "incorporate another workflow"。它只是添加来自另一个文件的规则,就像您使用 copy/paste 添加它们一样(有一点不同,即 include
不会影响您的目标规则)。 subworkflow
有一组独立的规则,这些规则协同工作以生成此子工作流的最终目标文件。因此它结构良好,与主工作流和其他子工作流隔离。
无论如何,我个人的经验表明,Snakemake 中存在一些错误,使得使用子工作流非常困难。包含该文件非常简单易行。
另一方面,在 Snakemake 文档中,如果您开发依赖于其输出的规则,includes
directive can incorporate all of the rules of another workflow into the main workflow and apparently can show up in snakemake --dag -n | dot -Tsvg > dag.svg
. Sub-workflows 可以在主工作流之前执行。
我的问题是:这两者到底有何不同?现在,我正在处理一个工作流,似乎我可以只使用 includes
并将输出的名称放在主工作流的 rule all
中。我什至可以将输出放在主工作流规则的 input
中,使 includes
工作流在该规则之前执行。此外,无论出于何种原因,我都无法想象包含子工作流的 DAG。子工作流提供了哪些 includes
指令不能做的事情?
我从未使用过子工作流,但在这种情况下,使用它们可能比 include
指令更方便。 (理论上,我认为你不需要 include
和 subworkflow
因为你可以把所有东西都写在一个巨大的 Snakefile 中,重点更多的是方便。)
假设您正在编写一个工作流,该工作流依赖于已发表作品(或您之前的项目)的结果文件。作者没有制作 public 您需要的文件,但他们提供了一个 snakemake 工作流程来生成它们。他们的 snakemake 工作流程可能非常复杂,您需要的文件可能只是中间步骤。因此,您无需理解所有工作流程并将其解析为您自己的 include
指令,而是使用 subworkflow
生成所需的文件。例如:
subworkflow jones_etal:
workdir:
"./jones_etal"
snakefile:
"./jones_etal/Snakefile"
rule all:
input:
'my_results.txt',
rule one:
input:
jones_etal('from_jones.txt'),
output:
'my_results.txt',
...
include
没有 "incorporate another workflow"。它只是添加来自另一个文件的规则,就像您使用 copy/paste 添加它们一样(有一点不同,即 include
不会影响您的目标规则)。 subworkflow
有一组独立的规则,这些规则协同工作以生成此子工作流的最终目标文件。因此它结构良好,与主工作流和其他子工作流隔离。
无论如何,我个人的经验表明,Snakemake 中存在一些错误,使得使用子工作流非常困难。包含该文件非常简单易行。