我可以将文件添加为全部规则吗:输出中未定义

时间:2018-11-13 12:37:02

标签: snakemake

许多命令会默默地产生规则输出部分中未定义的额外文件。

当我尝试通过将它们添加到“全部规则”中来确保生成这些文件时:由于在规则输出列表中找不到该文件,因此重新运行工作流失败。

我可以在“全部规则:”中添加补充文件(不显示为{输出})吗?

谢谢

例如: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}定义中。

这就是为什么我问我是否可以创建“假的”输出变量,而不是将其“用于”运行命令,而是允许将相应的项目放置在“全部规则”中:-我现在更清楚了吗:-)。

2 个答案:

答案 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(),它可能适合这里。