2016-11-03 3 views
2

私は、文字で要素ごとに1つのファイルを取得するためにNUMSの上に要約し、LETTERSのx NUMSの組み合わせのために、最初の4つのファイルを生成しようとしている:次のエラーで、このsnakefile結果を実行Snakemakeで部分的な展開を行うには?

LETTERS = ["A", "B"] 
NUMS = ["1", "2"] 


rule all: 
    input: 
     expand("combined_{letter}.txt", letter=LETTERS) 

rule generate_text: 
    output: 
     "text_{letter}_{num}.txt" 
    shell: 
     """ 
     echo "test" > {output} 
     """ 

rule combine text: 
    input: 
     expand("text_{letter}_{num}.txt", num=NUMS) 
    output: 
     "combined_{letter}.txt" 
    shell: 
     """ 
     cat {input} > {output} 
     """ 

WildcardError in line 19 of /tmp/Snakefile: 
No values given for wildcard 'letter'. 
    File "/tmp/Snakefile", line 19, in <module> 

部分expandは不可能と思われます。それはexpandの制限ですか?もしそうなら、どのように私はそれを回避すべきですか?

答えて

4

これはexpandの制限ではないようですが、文字列の書式化がPythonで動作する方法に慣れているという制限があります。あなたがそれらを無視したいとき

text_A_2.txt 
text_A_1.txt 
text_B_2.txt 
text_B_1.txt 
combined_A.txt 
combined_B.txt 
2

確かに、括弧をエスケープする必要があります。このsnakefileは今、期待以下のファイルが生成する実行

LETTERS = ["A", "B"] 
NUMS = ["1", "2"] 


rule all: 
    input: 
     expand("combined_{letter}.txt", letter=LETTERS) 

rule generate_text: 
    output: 
     "text_{letter}_{num}.txt" 
    shell: 
     """ 
     echo "test" > {output} 
     """ 

rule combine text: 
    input: 
     expand("text_{{letter}}_{num}.txt", num=NUMS) 
    output: 
     "combined_{letter}.txt" 
    shell: 
     """ 
     cat {input} > {output} 
     """ 

:私は、非拡張ワイルドカードのための二重括弧を使用する必要がありますexpandにあります。それはstr.formatに依存しており、したがってformatのルールはexpandにも適用されます。

関連する問題