Snakefile 中的多个命名输入

Multiple named inputs in Snakefile

我想制作一个如下所示的管道:

  1. 为每个数据集提取一些特征
  2. 制作所有功能的唯一列表
  3. 从所有原始数据集中提取唯一列表。

这是我所在位置的基本示例

input_dict = {"data1": "/path/to/data1", "data2": "/path/to/data2"}

rule all:
    input: 
        expand('data/{dataset}.processed', dataset=input_dict.keys())

rule extract_master:
    output:
        'data/{dataset}.processed'
    input:
        master = rules.master_list.output, dataset = lambda wildcards: input_dict[wildcards.dataset]
    shell:
        "./extract_master.py --input {input.dataset} --out {output} --master {input.master}"

rule master_list:
    output:
        'data/master.txt'
    input:
        expand('data/{dataset}.chunk', dataset=input_dict.keys())
    shell:
        './master_list.py --input {input} --output {output}'

rule get_chunk:
    input:
        lambda wildcards: input_dict[wildcards.dataset]
    output:
        'data/{dataset}.chunk'
    shell:
        "./get_chunk.py --input {input} --output {output}"

我收到一个错误:

'Rules' object has no attribute 'master_list'

我不知道如何指定两个命名输入,其中每个输入都不是简单的字符串。如果有语法可以用于 extract_master 规则中的 input 部分来解决这个问题,那就太好了。否则,将很高兴收到任何关于更好方法的想法。

Importantly, be aware that referring to rule a here requires that rule a was defined above rule b in the file, since the object has to be known already. This feature also allows to resolve dependencies that are ambiguous when using filenames.

Source

也就是说,在你的例子中,rule master_list应该定义在rule extract_master之前。