并行化snakemake规则

bde*_*vil 4 python snakemake

抱歉,如果这是一个幼稚的问题,但我仍在尝试理解 Snakemake 的复杂性。

我有一个目录,其中包含许多我想要并行应用规则的文件(即我想要向集群提交相同的脚本,为每次提交指定不同的输入文件)。

我第一次尝试使用 Expand 作为输入文件,但这只导致了一个作业提交:

CHROMS = [str(c) for c in range(1, 23)] + ["X"]
rule vep:
    input:
        expand("data/split/chr{chrom}.vcf", 
               chrom=CHROMS)
    output:
        expand("data/vep/split/chr{chrom}.ann.vcf",
               chrom=CHROMS)
    shell:
        "vep "
        "{input} "
        "{output}"
Run Code Online (Sandbox Code Playgroud)

这里有替代方法吗?

谢谢你!

bli*_*bli 5

目前,您的工作流程确实只应用一次“vep”规则,它vep以所有输入和输出作为参数执行。我不知道如何vep工作,但它可能会失败或没有达到您的预期。

您可能应该在不扩展的情况下编写规则的输入和输出,并使用“全部”规则驱动它,这会扩展:

CHROMS = [str(c) for c in range(1, 23)] + ["X"]


rule all:
    input:
        expand("data/vep/split/chr{chrom}.ann.vcf",
               chrom=CHROMS)

rule vep:
    input:
        "data/split/chr{chrom}.vcf"
    output:
        "data/vep/split/chr{chrom}.ann.vcf"
    shell:
        "vep "
        "{input} "
        "{output}"
Run Code Online (Sandbox Code Playgroud)

为了生成“all”规则所需的输入,snakemake 将确定chrom需要应用“vep”规则多少次以及如何(即通配符的值是什么)。

请务必将“全部”规则放在所有其他规则之前。