【发布时间】:2018-06-13 02:20:42
【问题描述】:
对不起,如果这是一个幼稚的问题,但我仍在努力解决 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}"
这里有替代方法吗?
谢谢!
【问题讨论】:
-
此外,当前形式的
shell命令会导致错误,因为其中的每一行都将充当单独的命令。相反,您必须使用`转义换行符,即"vep \ {input} \ {output}"。注意:\旁边的换行符在 stackoverflow cmets 中的格式似乎不正确。 -
@JeeYem 没试过,但是这个语法是不是真的有效,导致3个字符串串联?
-
我昨天简单检查了一下,你的语法会导致问题。在snakemake 中尝试
-p标志以查看将要执行的命令。 -
@bli 使用的语法实际上是有效的,我错了。我在其他地方看到了类似的实现,在测试中,snakemake 确实按照您的建议将它们连接起来。对困惑感到抱歉。不知道上次测试时我是怎么错过的。
-
@JeeYem 我认为这是一个通用的 python 功能,允许在多行中切割字符串。如果我没记错的话,我曾在 argparse 帮助消息中看到过它。