命名规则和本地规则

问题描述 投票:0回答:1

版本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 指令更有意义。

snakemake
1个回答
0
投票

从版本 7.25.0 开始添加了 localrule 指令

© www.soinside.com 2019 - 2024. All rights reserved.