2017-10-26 12 views
0

私はhmmトレーニングをブートストラップしようとしています。したがって、いくつかのルールを2回ループする必要があります。スネークメイクのルールの再帰/ループ

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' 

しかし、私はフォーマット機能でワイルドカード{実行}にアクセスできません。どのように私が入力行内で{run}を保持できるかのヒント。または、繰り返しを実行するためのより良い方法でしょうか?

答えて

1

イテレーションを実行するより良い方法があるかどうかはわかりませんが、入力または出力のリストに文字列がない限り、ワイルドカードは解析されないため、実行にアクセスできない理由があります。 SnakeMakeでは、ワイルドカードオブジェクトを渡すラムダ関数を定義することができるので、次のようにする必要があります。

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