3 votes

Sortie dynamique dans snakemake

J'utilise snakemake pour développer un pipeline. J'essaie de créer des liens symboliques pour chaque fichier d'un répertoire vers une nouvelle cible. Je ne sais pas à l'avance combien de fichiers il y aura, donc j'essaie d'utiliser la sortie dynamique.

rule source:
    output: dynamic('{n}.txt')
    run:
        source_dir = config["windows"]
        source = os.listdir(source_dir)
        for w in source:
            shell("ln -s %s/%s source/%s" % (source_dir, w, w))

Voici l'erreur que j'obtiens :

W "Les règles cibles ne peuvent pas contenir de caractères génériques. Veuillez spécifier des fichiers concrets ou une règle sans caractères génériques."

Quel est le problème ?

6voto

Pereira Hugo Points 267

Pour les l'utilisation d'une fonction dynamique doit faire l'objet d'une autre règle dans laquelle les données d'entrée sont les fichiers dynamiques. comme ceci :

rule target :
  input : dynamic('{n}.txt')

rule source:
  output: dynamic('{n}.txt')
  run:
    source_dir = config["windows"]
    source = os.listdir(source_dir)
    for w in source:
      shell("ln -s %s/%s source/%s" % (source_dir, w, w))

Ainsi, Snakemake saura ce qu'il doit attribuer à la wildcard.

Remarque : lorsque vous utilisez un joker, vous devez toujours le définir. Ici, l'appel à dynamic dans l'entrée de la règle cible définira le caractère générique "{n}".

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X