【问题标题】:What is the practical difference between a sub-workflow and the includes directive? [Snakemake]子工作流和包含指令之间的实际区别是什么? [蛇人]
【发布时间】:2019-09-07 20:08:35
【问题描述】:

在 Snakemake 文档中,includes directive 可以将另一个工作流程的所有规则合并到主工作流程中,并且显然可以显示在 snakemake --dag -n | dot -Tsvg > dag.svg 中。另一方面,Sub-workflows 可以在主工作流之前执行,如果您开发依赖于其输出的规则。

我的问题是:这两者有什么不同?现在,我正在研究一个工作流程,似乎我可以通过使用includes 并将输出名称放在主工作流程的rule all 中。我什至可以将输出放在主工作流规则的input 中,使includes 工作流在该规则之前执行。此外,无论出于何种原因,我都无法可视化包含子工作流的 DAG。子工作流提供了includes 指令无法提供的哪些功能?

【问题讨论】:

    标签: workflow snakemake


    【解决方案1】:

    include 没有“合并另一个工作流程”。它只是从另一个文件添加规则,就像您使用复制/粘贴添加它们一样(include 不会影响您的目标规则的细微差别)。 subworkflow 有一组独立的规则,它们一起工作以生成此子工作流的最终目标文件。因此,它的结构很好,并且与主工作流和其他子工作流隔离。

    无论如何,我的个人经验表明,Snakemake 中存在一些错误,使子工作流的使用变得非常困难。包含文件非常简单明了。

    【讨论】:

      【解决方案2】:

      我从未使用过子工作流,但在这种情况下,使用它们可能比使用include 指令更方便。 (理论上,我认为您不需要includesubworkflow,因为您可以将所有内容都写在一个庞大的 Snakefile 中,重点是更方便。)

      假设您正在编写一个依赖于已发布作品(或您以前的项目)的结果文件的工作流。作者没有公开你需要的文件,但他们提供了一个 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',
          ...
      

      【讨论】:

        猜你喜欢
        • 2021-02-02
        • 2023-03-08
        • 2021-06-12
        • 1970-01-01
        • 2010-10-22
        • 1970-01-01
        • 2022-10-23
        • 2012-05-08
        • 2011-03-06
        相关资源
        最近更新 更多