Search code examples
snakemake

Snakemake: 'Missing input files' due to wrong wildcard expansion


I am new to Snakemake and I want to write a very simple Snakefile with a rule that processes each input file separately to an output file, but somehow my wildcards aren't interpreted correctly.

I have set up a minimal, reproducible example environment in Ubuntu 18.04 with the input files "test/test1.txt", "test/test2.txt", and a Snakefile. (snakemake version 5.5.4)

Snakefile:

ins = glob_wildcards("test/{f}.txt")

rule all:
  input: expand("out/{f}.txt", f=ins)

rule test:
  input: "test/{f}.txt"
  output: "out/{f}.txt"
  shell: "touch {output}"

This Snakefile throws the following error while building the DAG of jobs:

Missing input files for rule test:
test/['test1', 'test2'].txt

Any ideas how to fix this error?


Solution

  • I think you need to use ins.f or something similar:

    expand("out/{f}.txt", f= ins.f)
    

    The reason is explained in the FAQ

    [glob_wildcards returns] a named tuple that contains a list of values for each wildcard.