许多命令会默默地产生规则输出部分中未定义的额外文件。
当我尝试通过将它们添加到“全部规则”中来确保生成这些文件时:由于在规则输出列表中找不到该文件,因此重新运行工作流失败。
我可以在“全部规则:”中添加补充文件(不显示为{输出})吗?
谢谢
例如:STAR索引在由命令参数定义的文件夹中生成许多文件,检查文件夹是否存在并不意味着索引工作正常
为清楚起见,添加了STAR索引示例,将'star_idx_75'作为输出参数,并为其创建一个文件夹,该文件夹中存储了以下所有文件(其编号可能因索引类型的功能而异)。
chrLength.txt
chrName.txt
chrNameLength.txt
chrStart.txt
exonGeTrInfo.tab
exonInfo.tab
geneInfo.tab
Genome
genomeParameters.txt
SA
SAindex
sjdbInfo.txt
sjdbList.fromGTF.out.tab
sjdbList.out.tab
transcriptInfo.tab
我想要的是检查它们是否都存在,但是它们都不用于构建命令本身,如果我在规则全部中都要求它们:重新运行会中断,因为它们不在任何snakemake {output}定义中。
这就是为什么我问我是否可以创建“假的”输出变量,而不是将其“用于”运行命令,而是允许将相应的项目放置在“全部规则”中:-我现在更清楚了吗:-)。
答案 0 :(得分:1)
我可以在“全部规则:”中添加补充文件(不显示为{输出})吗?
我不这么认为,至少不是没有采取一些令人费解的解决方案。 rule all
中的每个文件(或更确切地说是第一个规则)必须具有在输出中列出该文件的规则。
如果您不想重复很长的列表,为什么不这样做呢?
star_index= ['ref.idx1', 'ref.idx2', ...]
rule all:
input:
star_index
rule make_index:
input:
...
output:
star_index
shell:
...
答案 1 :(得分:0)
最好将它们全部列出在规则的输出中,但仅在后续规则中使用相关的。您也可以考虑使用directory()
,它可能适合这里。