如何解决如何在 Snakemake 中创建嵌套循环?
我需要在 snakemake 中创建一个嵌套循环,到目前为止我已经尝试了不同的方法,但没有任何效果。
这是我正在处理的蛇文件的一部分。我不确定这是正确的做法,因为我遇到了错误。
有谁知道在snakemake中这样做的正确方法吗?
STEPSMSA=["0","10","20","30","40","50","100","150","200","300","400","500","600"]
LENGTHS=["30","35","45","55","60","65","75","85","400"]
rule all:
input: expand("simulations/gen_{steps}_n1000000_l200.fa",steps=STEPSMSA)
# run fragSim
for p in STEPSMSA:
for l in LENGTHS:
rule:
input: "simulations/gen_{param}.fa".format(param=p)
output: "simulations/gen_{param}_n1000000_l{l}.fa".format(param=p)
shell: "/home/incerta/jana/Software/gargammel/src/fragSim -n 1000000 -l {l} {input} |gzip > {output}"```
解决方法
可能有三个错误。
首先,根据错误消息,我假设您尝试使用新的
蛇文件名为 Snakefile_new
(而不是通常的名称
Snakefile
)。您可以使用选项 -s
执行此操作,例如,
snakemake -j 1 -s Snakefile_new
其次,输出中缺少 {l}
的格式。
第三,p
和 l
的哪些值用于
匿名规则的外壳。 I recently had a similar problem 并发现 params
中定义的一个 snakemake 参数导致了规则的正确定义。
希望以下解决方案有效:
STEPSMSA=["0","10","20","30","40","50","100","150","200","300","400","500","600"]
LENGTHS=["30","35","45","55","60","65","75","85","400"]
rule all:
input: expand("simulations/gen_{steps}_n1000000_l200.fa",steps=STEPSMSA)
# run fragSim
for p in STEPSMSA:
for l in LENGTHS:
rule:
input: f"simulations/gen_{p}.fa"
output: f"simulations/gen_{p}_n1000000_l{l}.fa"
params: length = l
shell: f"/home/incerta/jana/Software/gargammel/src/fragSim -n 1000000 -l {{params.length}} {{input}} |gzip > {{output}}"
请注意,该解决方案使用 f-strings of python3。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。