Snakemake:参数化运行,可重复使用中间输出文件

问题描述

这是我正在努力寻找以下解决方案的一个复杂问题:

想象一下,有一个Snakemake工作流程,其中包含几个可以通过某种方式进行参数化的规则。现在,我们可能要测试某些规则的不同参数设置,以查看结果如何不同。但是,理想情况下,如果这些规则依赖于未参数化的其他规则的输出,则我们想重新使用这些不变的文件,而不是针对每个参数设置重新计算它们。此外,如果可能的话,所有这些都应该是可选的,以便在默认情况下,用户看不到任何这些。

其中存在固有的复杂性(指定要重用的文件等)。我还知道,这并非完全是Snakemake(“可复制的工作流程”)的预期用例,而是更多的用于实验的元功能。

以下是一些方法:

  • 天真的解决方案:将每个可能参数的通配符添加到文件路径。这变得很丑陋,难以维护,并且很难真正快速地扩展。不是解决方案。
  • 一种不错的方法是为每次运行命名,并为该名称创建一个单独的配置文件,其中包含我们需要的所有设置。然后,对于这样一组命名的参数设置,我们只需要一个通配符。那可能需要读取一些元配置文件表,并进行处理。但这并不能解决重用问题。此外,这意味着我们需要为一个snakemake调用提供多个配置文件,而且似乎不可能(它们会相互更新,但不被视为单独运行的单独配置)。
  • 通过每次指定单个配置文件(例如通过通配符),以某种方式使用子工作流程。不确定是否可以完成此操作(例如configfile: path/to/{config_name}.yaml)。仍然不是文件重用的解决方案。
  • 快捷方式:运行所有规则,直到在不同配置之间共享的最后一个输出文件。然后,手动(或使用一些其他脚本)创建带有指向此“基本”运行的符号链接的目录,并使用单独的配置文件为每个配置运行指定参数。仍然需要分别为每个目录调用snakemake,这使得群集使用更加困难。

尽管这些都不能解决所有问题。任何想法表示赞赏!

在此先谢谢大家 卢卡斯

解决方法

Snakemake 现在提供 Paramspace 助手来解决这个问题! https://snakemake.readthedocs.io/en/stable/snakefiles/rules.html?highlight=parameter#parameter-space-exploration

我还没有尝试过,但似乎是解决问题的方法!

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...