【问题标题】:Running a snakemake pipeline for multiple datasets为多个数据集运行蛇形管道
【发布时间】:2021-01-05 03:51:10
【问题描述】:

我有一个 snakemake 管道,其中包含调用其他程序和自定义 R 和 python 脚本的规则。

我有多个数据集,需要在这些数据集上运行同一管道。通常我会为每个数据集创建一个单独的文件夹,并放置一个特定于数据集的配置文件并单独运行。

由于这次我有 20 多个数据集,我想知道是否有更自动化的方法来执行此操作。数据集之间主要有 4 个参数发生变化:输入文件位置、引物、质量控制参数和结果的输出目录。 有没有办法拥有一个“主”配置文件,其中包含关于这 4 个参数的信息和一个蛇文件,然后调用第二个蛇文件的次数与数据集的数量一样多?

这整个想法对我来说似乎是一个 for 循环,它遍历这 4 个参数的数组,但我不知道如何在蛇形中实现它。

欢迎任何建议和想法! 谢谢 赫娜

【问题讨论】:

  • subworkflow 适合你吗?

标签: snakemake


【解决方案1】:

如果所有参数在输出文件名中都有些“编码”,我认为这可以使用单个蛇文件来完成。

您的主配置文件将包含每个数据集的部分,该部分可能包含所需的输出目录以及特定于该数据集的配置文件的路径。

概念证明:

Snakefile:

import yaml

datasets = list(config.keys())

results = []
for dataset in datasets:
    out_dir = config[dataset]["out_dir"]
    with open(config[dataset]["conf"]) as conf_fh:
        dat_conf = yaml.safe_load(conf_fh)
        p1 = dat_conf["p1"]
        p2 = dat_conf["p2"]
        p3 = dat_conf["p3"]
        p4 = dat_conf["p4"]
    results.append(f"{out_dir}/{p1}_{p2}_{p3}_{p4}.out")


rule all:
    input:
        results


rule make_output:
    output:
        "{out_dir}/{p1}_{p2}_{p3}_{p4}.out"
    shell:
        "touch {output[0]}"

main_config.yaml:

dat1:
    out_dir: "dat1"
    conf: "dat1_conf.yaml"
dat2:
    out_dir: "dat2"
    conf: "dat2_conf.yaml"

dat1_conf.yaml:

p1: "A"
p2: "a"
p3: "1"
p4: "01"

dat2_conf.yaml:

p1: "B"
p2: "b"
p3: "2"
p4: "02"

可以执行,例如如下:

snakemake --snakefile Snakefile --configfile main_config.yaml -j 2

这将创建以下结果文件:

dat1/A_a_1_01.out
dat2/B_b_2_02.out

【讨论】:

  • 同意,扫描所有数据集的单个管道通常是惯用的方式。我总是试图以每个项目/论文一个管道结束。另请注意,您可以将所有这些数据集参数放入 TSV 文件中,然后使用 pandas+paramspace 来探索它们。
  • 我不知道Paramspace。有趣的功能,谢谢。我想象开发人员之间会就param_sep 的默认值的选择进行无休止的讨论。
  • 感谢 bli 如此详细地回答我的问题! @JohannesKöster 我正在尝试使用 paramspace,但我不确定如何将 paramspace.instance 中的值传递给类似于 cutadapt shell 命令的东西。如何在 shell 命令中单独访问它们,而不是将它们传递给 python 脚本。谢谢!
  • 您将 paramspace.instance 放入规则的参数中,然后使用 {instance[myparam]} 之类的内容格式化 shell 命令。请注意密钥名称周围缺少的引号。这是正常的 Python 格式化语法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-06-12
  • 2021-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-16
  • 1970-01-01
相关资源
最近更新 更多