版本7.3.8
我通常构建 config.yaml,以便可以使用以下方法自动下载公共数据集(如果不存在):
# config.yaml
paths:
vcf: 'path/to/vcf_{chrom}.vcf'
...
urls:
vcf: 'ftp://path_to_vcf_{chrom}.vcf'
...
# Snakefile
for key, url in config['urls'].items():
rule:
name: f'download_{key}'
output: config['paths'][key]
params: url=url
shell: # do download
自从添加了
name
指令后,我可以给规则赋予有意义的名称(这太棒了!)。问题是我想指定所有这些下载规则是localrules
。我可以用
# Snakefile
localrules:
download_vcf,
...
其中
download_vcf
是一个令牌,而不是一个字符串,所以我必须手动使该列表与我的配置保持最新。我想以编程方式将每个网址添加到本地规则中。我可以做类似的事情:
workflow._localrules.update(f'download_{key}' for key in config['urls'])
但我想避免使用私有变量。
还有其他推荐吗?这值得提出功能请求吗?更新 localrules 的方法还是新指令
localrule
来替换 rule
(类似于 checkpoint
)?我想得越多,就越觉得将规则标记为本地规则而不是单独的 localrules 指令更有意义。
从版本 7.25.0 开始添加了 localrule 指令