能否通过名称调用含params生成通配符的Snakemake单规则?
问题解答
直接运行snakemake a是不行的,因为这条规则里包含未确定的通配符domain,Snakemake没办法自动推断出这个通配符应该取什么值,自然没法生成对应的输出文件。
为什么不行?
Snakemake是输出驱动的工作流工具,核心逻辑是根据你要生成的具体输出文件倒推需要运行的规则。规则里的通配符是用来匹配一类输出文件的,当你只指定规则名时,Snakemake不知道你要生成2/{domain}.txt里的哪个具体文件,也就无法确定wc.domain的值,连带着params.domain_cat这个lambda函数也没法执行。
正确的运行方式
有两种方法可以单独运行这条规则:
- 直接指定具体的输出文件:比如你想生成
2/abc.txt,就执行:
Snakemake会从输出路径里解析出snakemake 2/abc.txtdomain=abc,自动填充通配符,执行规则生成目标文件。 - 用
--wildcards参数指定通配符值:直接给规则名加上通配符的具体取值,命令如下:
这种方式明确告诉Snakemake通配符snakemake a --wildcards domain=abcdomain的取值,它就能确定要生成的输出文件,进而运行规则。
额外说明
如果你的规则有多个输出(比如例子里的两个directory输出),只要指定其中一个带通配符的具体输出,或者用--wildcards补全所有必要的通配符,就能触发整个规则的运行。
内容的提问来源于stack exchange,提问作者Xue
相关产品推荐
相关产品推荐

