python snakemake输出文件中的可选参数

z4iuyo4d  于 2023-01-04  发布在  Python
关注(0)|答案(1)|浏览(132)

有没有可能在输出文件中有一个可以为空的通配符,同时,通过调用规则名称可以运行规则?通过调用规则名称,通配符应该自动设置为空。这是我试图实现的。
规则的简化示例:

rule a:
    input: "csv.file"
    output: "output{kw,.*}.png"
    params:
        kwargs = lambda wc: f'--{wc.kw.strip("_")}' if wc.kw.strip("_") \
             else ""
    shell: "example.py {input} {output} {params.kwargs}"

我可以调用rule a来生成output.png吗?

vltsax25

vltsax251#

不,不使用任何标准方法。如果规则包含通配符,则必须通过命令行指定,并且不能再通过名称调用。(AFAIK也无法通过CLI将通配符值传递给snakemake)。
我个人认为这是一个很好的设计选择:这样,任何执行(例如rule a)都是相同的、可区分的和有意的。默认值可能会使区分执行是打算在没有通配符(即默认值)的情况下运行工作流还是打算在使用空通配符(等于但不等于默认值)的情况下运行工作流变得更加困难。
根据您的用例,您可以实现一个rule all来调用您的规则并指定通配符,或者您可以使用规则继承来创建一个rule a_default,它创建一个具有通配符默认值的并行规则:

rule a:
    input:
        "csv.file",
    output:
        "output{kw,.*}.png",
    shell:
        "example.py {input} {output}"

# Option 1
# A rule which depends on rule a and executes it using the intended default value
rule all:
    input:
        "output.png",
    default_target: True

# Option 2
# A second rule which mirrors the behaviour of rule a but implements a default value
use rule a as a_default with:
    output:
        expand(rules.a.output[0], kw=""),

相关问题