并行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}"
这里有替代方法吗?
谢谢!
回答:
当前,您的工作流确实只包含一次应用“
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
通配符的值是多少)。
确保将“所有”规则放在所有其他规则之前。
以上是 并行Snakemake规则 的全部内容, 来源链接: utcz.com/qa/411044.html