如何获取Snakemake scatter/gather中配置的拆分总项数?
解决Snakemake scatter/gather获取拆分总数的问题
你遇到的KeyError是因为scattergather块的配置并不属于Snakemake的config字典,直接通过config["scattergather"]访问自然会报错。以下是两种正确获取拆分总数的方法:
方法1:直接在规则中引用scatter的split属性
Snakemake的scatter对象本身可以直接访问拆分数量,你可以在规则的shell命令中直接使用{scatter.split}:
scattergather: split=8 rule split: input: "input.txt" output: scatter.split("splitted/{scatteritem}.txt") shell: "split -l {scatter.split} {input} splitted/"
如果需要通过params传递,可借助lambda函数获取scatter属性:
rule split: input: "input.txt" output: scatter.split("splitted/{scatteritem}.txt") params: split_total = lambda wildcards, scatter: scatter.split shell: "split -l {params.split_total} {input} splitted/"
方法2:将拆分数量统一存在config中
把拆分总数先定义在配置文件(如config.yaml)里,让scattergather和规则都引用这个配置值,保证参数统一:
- 在
config.yaml中添加:
scatter_config: split: 8
- 在Snakemake规则文件中:
scattergather: split=config["scatter_config"]["split"] rule split: input: "input.txt" output: scatter.split("splitted/{scatteritem}.txt") params: split_total = config["scatter_config"]["split"] shell: "split -l {params.split_total} {input} splitted/"
后续不管是通过CLI传递配置(如--config scatter_config.split=12)还是修改配置文件,所有引用的地方都会同步更新。
内容的提问来源于stack exchange,提问作者Cornelius Roemer
相关产品推荐
相关产品推荐

