在snakemake中递归/循环规则

时间:2017-10-26 06:38:37

标签: snakemake

我正在尝试引导hmm训练,因此我需要多次循环一些规则。我的想法是这样做:

dict={'boot1':'init', 'boot2':'boot1', 'final':'boot2'} # Define the workflow


rule a_rule_to_initialize_and_make_the_first_input
    output:
        'init_hmm'

rule make_model:
    input:
        '{0}_hmm'.format(dict[{run}]) # Create the loop by referencing the dict.
    output:
        '{run}_training_data'

rule train:
     input:
         '{run}_training_data'
     output:
         '{run}_hmm'

但是,我无法访问format函数中的通配符{run}。有关如何在输入行中保持{run}的任何提示。或者也许是一种更好的迭代方式?

1 个答案:

答案 0 :(得分:1)

我不确定是否有更好的方法来进行迭代,但您无法访问运行的原因是因为通配符未被解析,除非他们已经进入直接在输入或输出列表中的字符串。 Snakemake允许您定义传递通配符对象的lambda函数,因此您需要执行:

input:
    lambda wildcards: '{0}_hmm'.format(dict[wildcards.run])