I am writing this rule:
rule process_files:
input:
dataout=expand("{{dataset}}/{{sample}}.{{ref}}.{{state}}.{{case}}.myresult.{name}.tsv", name=my_list[wildcards.ref])
output:
"{dataset}/{sample}.{ref}.{state}.{case}.endresult.tsv"
shell:
do something ...
Were expand
will get value from dictionary my_dictionary
based on the ref
value. I used wildcards
like this my_dictionary[wildcards.ref]
. But it ends up with this error name 'wildcards' is not defined
my_dictionary
something like:
{A:[1,2,3], B:[s1,s2..].....}
I could use
def myfun(wildcards):
return expand("{{dataset}}/{{sample}}.{{ref}}.{{state}}.{{case}}.myresult.{name}.tsv", name=my_dictionary[wildcards.ref])
and use myfun
as input , but this does not answer why I can not use expand in place directly
Any suggestion how to fix it?
Your question seems similar to snakemake wildcards or expand command and the bottom line is that wildcards
is not defined in the input. So your solution of using an input function (or a lambda function) seems correct.
(As to why wildcards
is not defined in input, I don't know...)