并行化 snakemake 规则
Parallelizing snakemake rule
抱歉,如果这是一个幼稚的问题,但我仍在努力思考 Snakemake 的复杂性。
我有一个包含多个文件的目录,我想对这些文件并行应用规则(即我想向集群提交相同的脚本,为每次提交指定不同的输入文件)。
我首先尝试对输入文件使用扩展,但这只导致提交了一个作业:
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
是如何工作的,但它可能会失败或没有达到您的预期。
您可能应该在不扩展的情况下编写规则的输入和输出,并使用 "all" 规则驱动它,这会扩展:
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"规则。
务必将 "all" 规则放在所有其他规则之前。
抱歉,如果这是一个幼稚的问题,但我仍在努力思考 Snakemake 的复杂性。
我有一个包含多个文件的目录,我想对这些文件并行应用规则(即我想向集群提交相同的脚本,为每次提交指定不同的输入文件)。
我首先尝试对输入文件使用扩展,但这只导致提交了一个作业:
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
是如何工作的,但它可能会失败或没有达到您的预期。
您可能应该在不扩展的情况下编写规则的输入和输出,并使用 "all" 规则驱动它,这会扩展:
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"规则。
务必将 "all" 规则放在所有其他规则之前。