在 Snakemake 规则中迭代 2 个参数

Iterate over 2 parameters in a Snakemake rule

我有 2 个参数,我试图在 Snakemake 中对其进行迭代。这通常使用 expand 是可行的,但是,我想将 expand 中的参数用于命令行:

STEPSMSA=["0","10","20","30","40"]
LENGTHS=["30","35","40","45","50"]

rule sim:                                                                                                                                                                                               
input: expand("simulations/gen_{step}.fa",step=STEPSMSA)                                                                                                                                                
output: expand("simulations/gen_{step}_n1000000_l{len}.fa",step=STEPSMSA,len=LENGTHS)                                                                                                                   
shell: expand("simulate  -n 10000000 -l {len} {input} |gzip > {output}",len=LENGTHS)                                                                           

请注意,“模拟”是一个可访问的内部 UNIX 程序。我想要的是 运行:

simulate  -n 10000000 -l 30 simulations/gen_0.fa |gzip > simulations/gen_0_n1000000_l30.fa
simulate  -n 10000000 -l 35 simulations/gen_0.fa |gzip > simulations/gen_0_n1000000_l35.fa
simulate  -n 10000000 -l 40 simulations/gen_0.fa |gzip > simulations/gen_0_n1000000_l40.fa
...
simulate  -n 10000000 -l 50 simulations/gen_40.fa |gzip > simulations/gen_40_n1000000_l50.fa

有什么方法可以使用 Snakemake 来指定它吗?

所以您希望 simulations/gen_{step}_n1000000_l{len}.fa 用于 step 和 len 的所有组合,对吗?如果是这样,你可以这样做:

STEPSMSA=["0","10","20","30","40"]
LENGTHS=["30","35","40","45","50"]

rule all:
    input:
        expand("simulations/gen_{step}_n1000000_l{len}.fa", step=STEPSMSA, len=LENGTHS)

rule sim:                                                                                                                                                                                               
    input: 
        "simulations/gen_{step}.fa"                                                                                                                                             
    output: 
        "simulations/gen_{step}_n1000000_l{len}.fa"
    shell: 
        "simulate  -n 10000000 -l {wildcards.len} {input} | gzip > {output}"