Snakemake: Могу ли я получить доступ к подстановочным знакам вне правил? - PullRequest
3 голосов
/ 07 августа 2020

Можно ли получить доступ к подстановочным знакам змейки вне правила?

1 Ответ

0 голосов
/ 08 августа 2020

Подстановочный знак - это переменная, имеющая значение только внутри правила. Это позволяет правилу быть общим c, а фактическое значение подстановочного знака присваивается при выполнении правила.

В вашем коде вы пытаетесь использовать подстановочный знак вне любого правила. Здесь вам не нужны подстановочные знаки:

if samples_dict.loc[wildcards.sample]['Sequencing_type'] == "SE":
    rule test_SE :
        input : '{sample}.txt'
        output : '{sample}_done.txt'
        conda :
            'test.yaml'
        shell :
            "somecommand -i {input} -o {output} ;"
elif samples_dict.loc[wildcards.sample]['Sequencing_type'] == "PE":
    rule test_PE :
        input :
                input1="input1",
                input2="input2"
        output :
                output1="output1",
                output2="output2"
        conda :
            'test.yaml'
        shell :
            "somecommand -i1 {input.input1} -i2 {input.input2} -o1 {output.output1} -o2 {output.output2} ;"
else:
    rule test_fail :
        output :
            '{sample}.txt'
        conda :
            'test.yaml'
        shell :
            'echo "Use PE or SE in Sequencing_type column" > {output};'

Однако возникает другой вопрос: зачем вам вообще нужны эти условные правила? Эти правила производят разные результаты и не должны конфликтовать. Попробуйте удалить все if/elif/else, так как это не идиоматический c способ использования Snakemake.

...