我是Snakemake的新手,我遇到了一个让我苦苦挣扎的bug。我有一个这样的通配符:
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'发布于 2019-11-28 16:09:31
我不确定我们是否得到了解决它所需的完整信息,但我们仍然可以尝试:)。
通配符的名称完全是任意的,您可以随心所欲地命名它们。如果您将通配符命名为rank,则它与其他规则的通配符没有任何关系。实际上,在一个规则中通配符rank的值可以是什么,在另一个规则中可以是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)现在我不确定这是否能解决你的全部问题,但它肯定会把你推向正确的方向。
https://stackoverflow.com/questions/59083493
复制相似问题