Snakemake能否设置可空wildcard?运行通配符报错问题求助
问题原因
你的配置有三个核心错误:
- 你最开始使用的
{.*}、{freq,.*}是Snakemake 4.x及更早版本的可选通配符语法,该写法在5.x版本后就已完全废弃,所以第一个版本直接报错识别到了无名称的通配符。 - 第二个版本中你虽然正确定义了
freq通配符的约束为可匹配空值的.*,但你的freq_list中没有显式包含空字符串""作为可选取值,调用expand函数时遍历不到对应值,自然会报No values given for wildcard 'freq'的错误。 - 你
create_html规则的输出通配符是freq,但输入路径里的对应通配符命名为cohort_freq,二者名称不统一会导致通配符匹配失败,也可能引发连锁报错。
修复方案
- 定义
freq_list时显式加入空字符串作为可选值,示例如下:
# 根据你的实际需求调整非空取值,必须显式加入空字符串"" freq_list = ["", ".0.01", ".0.001", ".0.0001"]
- 保持
freq的通配符约束为".*",同时统一输入输出的通配符命名,调整后的核心代码片段如下:
wildcard_constraints: udn_id="ID.+", compound="(no_)*compound(_genome|_exome)*", freq=".*" rule all: input: expand("file/path/{id}/{compound}{freq}.html", id=[config["id"]], compound=compound_list, freq=freq_list) rule create_html: output: "file/path/{id}/{compound}{freq}.html" # 将输入路径原cohort_freq改为freq,和输出通配符保持一致 input: "/oak/stanford/groups/euan/UDN/output/AnnotSV/AnnotSV_3.0.5/{udn_id}/WGS_blood_"+hg+"/gateway_hpo/{udn_id}.{comp_het}{freq}.annotated.tsv" shell: "# 这里写你的shell命令"
- 如果你确实需要保留
cohort_freq作为输入通配符名称,可以在规则内添加局部通配符约束,或者通过params做名称映射,不建议跨规则使用不同名称的对应通配符,会大幅提高匹配出错概率。
内容的提问来源于stack exchange,提问作者amm
相关产品推荐
相关产品推荐

