对不起,如果这是一个天真的问题,但我仍然试图围绕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 :(得分:1)
目前,您的工作流程确实包含应用" vep"规则只执行一次,它以所有输入和输出作为参数执行ccze
。我不知道vep
是如何运作的,但它可能会失败或者没有达到预期的效果。
您可能应该编写规则的输入和输出而不进行扩展,并使用" all"来驱动它。规则,进行扩展:
vep
生成" all"的所需输入规则,snakemake将确定需要应用" 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}"
通配符的值是多少)。规则。
一定要把"全部"所有其他规则之前的规则。