使用多个值扩展参数的最佳实践

问题描述 投票:0回答:1

我有一个工作流程,其中我扩展具有多个值的参数(即 param1=[A,B]、param2=[1,2])。该规则产生了预期的结果。但是,我不确定我是否遵循最佳实践。特别是,我不确定该规则的“可读性”和明确性如何,因为我在

Snakefile
中扩展参数并使用
wildcards
在规则中引用它。我非常感谢您的帮助和建议。以下是工作流程:

config.yaml:

test:
  param1: [A, B]
  param2: [1, 2]

蛇锉:

from snakemake.utils import min_version
min_version("8.0")

configfile: "config/config.yaml"

rule all:
    input:
        expand("out-param1_{p1}-param2_{p2}.txt", p1=config["test"]["param1"], p2=config["test"]["param2"]),
      
include: "rules/test_rule.smk"

规则:

rule test_rule:
    output:
        "out-param1_{p1}-param2_{p2}.txt"
    shell:
        """
        echo "param1 is: {wildcards.p1} param2 is: {wildcards.p2}" > {output}
        """

它会生成所有 4 个预期的输出文件:

out-param1_A-param2_1.txt
out-param1_A-param2_2.txt
out-param1_B-param2_1.txt
out-param1_B-param2_2.txt

祝你有美好的一天

snakemake
1个回答
0
投票

我认为你做的事情是正确的。我知道这似乎有点奇怪,您通常会从已知输入的列表开始,然后使用

expand()
来决定需要什么工作流程输出,然后使用通配符模式构建一系列规则,允许 Snakemake 追溯这些输出文件名到原始输入。这一切看起来有点循环,但这就是它的工作原理。

所以继续。我有一个小建议,但我不确定它是否真的能让文章更具可读性,只是更简洁一点。

rule all:
    input:
        expand("out-param1_{param1}-param2_{param2}.txt", **config["test"])
© www.soinside.com 2019 - 2024. All rights reserved.