首页 > 解决方案 > 规则之间的snakemake通配符范围

问题描述

我已经阅读了有关规则的文档常见问题解答这个问题,但我仍然无法确定:如果通配符foo在规则中定义bar,它的值可以在规则中访问baz吗?

标签: snakemake

解决方案


我不确定我是否在回答您的问题,以下内容可能并不完全正确... Snakemake 只关心您是否有一个且只有一个路径可以通向所请求的文件(即第一条规则中定义的文件,通常称为all)。

如果规则定义了可以导致最终输出的通配符,那么是的,这些通配符对以下规则是可见的。

在下面的脚本中,我们要求提供文件A.txtB.txt. 要生成 A.txt,我们不需要任何通配符。要生成 B.txt,我们需要通过{wc}在规则栏中定义并在规则中使用的通配符B。请注意,通配符{sample}根本不会出现在 rule 之外all。另请注意,规则bar生成两个文件,B.tmp 和 C.tmp,但规则B只需要B.tmp. (您应该能够使用 干运行此脚本snakemake -p -n

rule all:
    input:
        expand('{sample}.txt', sample= ['A', 'B']),

rule A:
    output:
        'A.txt',
    shell:
         "touch {output}"

rule bar:
    output:
        expand('{wc}.tmp', wc= ['B', 'C'])
    shell:
        r"""
        touch {output}
        """

rule B:
    input:
        '{wc}.tmp',
    output:
        '{wc}.txt',
    shell:
        r"""
        touch {input} {output}
        """

推荐阅读