我正在尝试引导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}的任何提示。或者也许是一种更好的迭代方式?
答案 0 :(得分:1)
我不确定是否有更好的方法来进行迭代,但您无法访问运行的原因是因为通配符未被解析,除非他们已经进入直接在输入或输出列表中的字符串。 Snakemake允许您定义传递通配符对象的lambda函数,因此您需要执行:
input:
lambda wildcards: '{0}_hmm'.format(dict[wildcards.run])