并行化蛇规则

发布于 2021-01-29 15:05:21

抱歉,如果这是一个幼稚的问题,但我仍在努力解决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}"

这里有替代方法吗?

谢谢!

关注者
0
被浏览
60
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    当前,您的工作流确实只包含一次应用“
    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}"
    

    为了生成“ all”规则的期望输入,snakemake将确定应用“ vep”规则所需的次数和次数(即chrom通配符的值是多少)。

    确保将“所有”规则放在所有其他规则之前。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看