如何修复“ MissingOutputException”?

时间:2019-02-13 09:09:08

标签: snakemake

我猜这是蛇形v5.1之后的重复出现的问题 看到了几个线程,但无法找出问题所在。请帮助。

rule all:
input:
    [OUT_DIR + "/" + x for x in expand('{sample}', sample = SAMPLES)]

rule star_mapping:
input:
    dna= DNA,
    r1 = lambda wildcards: FILES[wildcards.sample]['R1'],
    r2 = lambda wildcards: FILES[wildcards.sample]['R2'],
output:
    directory(join(OUT_DIR, '{sample}'))
log:
    'logs/{sample}_star_mapping.log'
run:
    shell(
    'STAR --runMode alignReads'
        ' --runThreadN 10'
        ' --genomeDir {input.dna}'
        ' --genomeLoad LoadAndKeep'
        ' --limitBAMsortRAM 8000000000'
        ' --readFilesIn {input.r1} {input.r2}'
        ' --outSAMtype BAM SortedByCoordinate'
        ' --quantMode GeneCounts'
        ' --readFilesCommand zcat'
        ' --outFileNamePrefix {output}_'
        ' &> {log}'
    )

错误:    规则star_mapping中的MissingOutputException。

1 个答案:

答案 0 :(得分:0)

我认为您对directory()函数的理解不正确。
通过指定directory(join(OUT_DIR, '{sample}')),snakemake期望创建OUTDIR/{sample}/目录。
但是,规则star_mapping将创建以下文件:

OUTDIR/{sample}_Aligned.sortedByCoord.out.bam
OUTDIR/{sample}_Log.final.out
OUTDIR/{sample}_Log.out
etc...

根据
https://snakemake.readthedocs.io/en/stable/snakefiles/rules.html#directories-as-outputs
directory()应该用于时间戳查询issus。该文档指出:

  

始终考虑是否无法使用常规方式制定工作流程   文件,然后再使用directory()。

所以我想您应该考虑定义文件,例如:
"OUTDIR/{sample}_Aligned.sortedByCoord.out.bam"作为星级规则的输出,
--outFileNamePrefix {OUTDIR}/{wildcards.sample}_(STAR选项)