我有一个工作流程,其中我扩展具有多个值的参数(即 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
祝你有美好的一天
我认为你做的事情是正确的。我知道这似乎有点奇怪,您通常会从已知输入的列表开始,然后使用
expand()
来决定需要什么工作流程输出,然后使用通配符模式构建一系列规则,允许 Snakemake 追溯这些输出文件名到原始输入。这一切看起来有点循环,但这就是它的工作原理。
所以继续。我有一个小建议,但我不确定它是否真的能让文章更具可读性,只是更简洁一点。
rule all:
input:
expand("out-param1_{param1}-param2_{param2}.txt", **config["test"])