首页 > 解决方案 > 如何从 config.yaml 分配多个路径?

问题描述

我想使用snakemake 来分析我的数据集。由于我将使用不同的生物体,我希望 snakemake 在索引基因组时为每个生物体创建一个文件夹。

我在我的config file

organism:
  Dmel:
    fasta: "ftp://ftp.ensembl.org/pub/current_fasta/drosophila_melanogaster/dna/Drosophila_melanogaster.BDGP6.22.dna.toplevel.fa.gz"
    gtf: "ftp://ftp.ensembl.org/pub/current_gtf/drosophila_melanogaster/Drosophila_melanogaster.BDGP6.22.98.gtf.gz"
  Dpse:
    fasta: "ftp://ftp.ensemblgenomes.org/pub/current/metazoa/fasta/drosophila_pseudoobscura/dna/Drosophila_pseudoobscura.Dpse_3.0.dna.toplevel.fa.gz"
    gtf: "ftp://ftp.ensemblgenomes.org/pub/current/metazoa/gtf/drosophila_pseudoobscura/Drosophila_pseudoobscura.Dpse_3.0.45.gtf.gz"

并想尝试rule star_index在我的snakemake文件中调用此链接,就像这样:

rule star_index:
   input:
          fasta="genome/{org}.fa",
          gtf="genome/{org}.gtf"
   output:
          directory("genome/{org}/starIndex/")
   threads: 16
   params:
         prefix = lambda wildcards: "genome/{org}/starIndex".format(org=wildcards.organism) ## wildcards.organism # {config['organism']}
   shell:
          "mkdir -p {output} && "
          "STAR --runThreadN {threads} "
          "--outFileNamePrefix {output} "
          "--runMode genomeGenerate "
          "--genomeDir {output} "
          "--limitGenomeGenerateRAM {config[RAM]} "
          "--genomeSAindexNbases {config[SAindex]} "
          "--genomeFastaFiles {input.fasta} "
          "--sjdbGTFfile {input.gtf} "
          "--sjdbOverhang 100"

但是我无法弄清楚通配符有错误。

运行此规则时出现以下错误:

/local/Assa/projects/automation/P135.automation/getGenome_IndexGenome.Snakefile 的第 51 行中的 InputFunctionException: AttributeError: 'Wildcards' object has no attribute 'organism' Wildcards: org=Dmel

我知道问题出在params元素上,因为当我将这两行注释掉时,脚本将能够运行。

我不明白为什么wildcards.organism没有定义。

我将不胜感激任何提示或想法。谢谢阿萨

标签: snakemake

解决方案


AttributeError: 'Wildcards' object has no attribute 'organism' 
Wildcards: org=Dmel

似乎您organism完全拼写出来,而通配符是org.

params:
         prefix = lambda wildcards: "genome/{org}/starIndex".format(org=wildcards.org)

推荐阅读