You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否通过主通配符关联次级通配符并合并Snakemake规则?

可行方案:用字典关联通配符并合并规则

当然可以合并成一个规则,用字典关联主通配符与次级取值列表的方案完全可行,具体实现如下:

步骤1:重构变量定义为字典

把分散的次级取值列表整合到字典中,清晰对应主选项和其取值:

opt_vals_map = {
    'opt1': [0.1, 0.2],
    'opt2': [0.01, 0.02]
}

步骤2:合并为单个通用规则

借助Snakemake的通配符和expand功能,编写覆盖所有场景的规则:

# 触发所有需要生成的输出文件
rule all:
    input:
        expand(
            "{opt}/{val}/output.txt",
            opt=opt_vals_map.keys(),
            val=lambda wildcards: opt_vals_map[wildcards.opt]
        )

# 通用处理规则
rule process_opt:
    input:
        "{opt}/{val}/input.txt"
    output:
        "{opt}/{val}/output.txt"
    run:
        "./my-script.py --input {input} --output {output}"

关键说明

  • rule all通过expand结合lambda表达式,根据当前opt通配符动态拉取对应的val列表,自动生成所有需要的输出路径。
  • process_opt规则使用{opt}和{val}两个通配符,匹配所有符合{opt}/{val}结构的输入输出,完美复用原有运行命令,无需重复编写规则。

可选:添加通配符约束(避免无效组合)

如果要防止出现opt1搭配0.01这类无效组合,可添加通配符约束:

import re

wildcard_constraints:
    opt = '|'.join(re.escape(opt) for opt in opt_vals_map.keys()),
    val = lambda wildcards: '|'.join(re.escape(str(v)) for v in opt_vals_map[wildcards.opt])

内容的提问来源于stack exchange,提问作者ftcap_8989

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 14:43:31