Подстановочный знак - это переменная, имеющая значение только внутри правила. Это позволяет правилу быть общим 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.