Snakemake通配符意外更改

时间:2019-11-28 07:15:36

标签: snakemake

我是Snakemake的新手,并且遇到了一个使我感到困扰的错误。 我有这样的通配符:

 rank = ['Kingdom', 'Phylum', 'Class', 'Order', 'Family', 'Genus', 'Species']
 ordi = ['DCA', 'CCA', 'RDA', 'NMDS', 'MDS', 'NMDS', 'PCoA']

以前的版本没有通配符问题,可以成功运行

以前的版本规则全部如下:

rule all:
  input:
    expand('common_taxonomic/abundance_table_{Rank}.biom', Rank = rank),
    directory('Gene/gene_Venn'),
    directory('Gene/gene_samples_heatmap'),
    directory('taxa_ternaryplot'),
    directory(expand('beta/PCA/{Rank}', Rank = rank))
  benchmark:
    "Check_utility.tsv"

但是当我像

那样交换通配符位置时
directory(expand('beta/{Rank}/PCA/', Rank = rank)),
directory(expand('beta/{Rank}/{Ordi}', Rank = rank, Ordi = ordi))

我收到此错误

Building DAG of jobs...
MissingInputException in line 59 of /sysdata/Meta/pipeline/Snakefile:
Missing input files for rule biom_convert:
common_taxonomic/Table_taxa_NR_Kingdom/CCA.txt

如您所见,等级通配符用/ PCA或/ {ordi}延长。我对此很困惑,我写错了代码吗?

我的biom_convert规则是:

rule biom_convert:
  input: 'common_taxonomic/Table_taxa_NR_{rank}.txt'
  output:'common_taxonomic/abundance_table_{rank}.biom'
  shell:'biom convert -i {input} -o {output} --table-type="OTU table" --to-json'

1 个答案:

答案 0 :(得分:0)

我不确定我们是否有解决问题所需的完整信息,但我们仍然可以尝试:)。

通配符的名称完全是任意的,您可以随意命名。如果您将通配符命名为rank,则它与其他规则的通配符毫无关系。实际上,一条规则中的通配符rank的值可以是另一条规则中的ordi的通配符值!

所以我们要做的是确保输出规则正确区分等级和ordi:

rule biom_convert:
    input:
        'common_taxonomic/Table_taxa_NR_{rank}.txt'
    output:
        'common_taxonomic/abundance_table_{rank}/{ordi}.biom'
    shell:
        'biom convert -i {input} -o {output} --table-type="OTU table" --to-json'

如果需要,可以通过global wildcard constraints强制使用rankordi的通配符:

wildcard_constraints:
    rank='|'.join(rank)
    ordi='|'.join(ordi)

现在我不确定这是否可以解决您遇到的所有问题,但绝对可以将您推向正确的方向。