我是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'
答案 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强制使用rank
和ordi
的通配符:
wildcard_constraints:
rank='|'.join(rank)
ordi='|'.join(ordi)
现在我不确定这是否可以解决您遇到的所有问题,但绝对可以将您推向正确的方向。