Snakemake中能否设置可空wildcard并通过规则名生成无后缀输出?
解决Snakemake可空Wildcard与直接调用规则的问题
你当前的规则写法没法直接调用rule a生成output.png,因为{kw,.*}是正则捕获型wildcard,要求必须匹配到内容(比如output_abc.png里的_abc),没法对应空值的情况。要实现「直接调用规则名时wildcard自动为空,生成output.png」,可以用以下两种方法:
方法一:使用可选Wildcard(推荐,Snakemake 5.1+支持)
Snakemake支持用{kw?}表示可选wildcard,为空时输出文件名就是output.png。修改后的规则如下:
rule a: input: "csv.file" output: "output{kw?}.png" params: kwargs = lambda wc: f'--{wc.kw.strip("_")}' if wc.kw and wc.kw.strip("_") else "" shell: "example.py {input} {output} {params.kwargs}"
- 直接运行
snakemake a,kw会自动设为空,生成output.png - 如果要生成带后缀的文件(比如
output_foo.png),可以运行snakemake output_foo.png,或者指定wildcard:snakemake a --wildcards kw=_foo
方法二:设置默认Wildcard值
如果你的Snakemake版本较低,不支持可选wildcard,可以给规则添加default_wildcards参数,指定kw的默认值为空:
rule a: input: "csv.file" output: "output{kw}.png" default_wildcards: kw = "" params: kwargs = lambda wc: f'--{wc.kw.strip("_")}' if wc.kw.strip("_") else "" shell: "example.py {input} {output} {params.kwargs}"
直接运行snakemake a时,会使用默认的空kw,生成output.png;需要带后缀时同样可以指定wildcard值。
内容的提问来源于stack exchange,提问作者Xue
相关产品推荐
相关产品推荐

