Search code examples
expandsnakemake

Snakemake Using expand with dictionary


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?


Solution

  • 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...)