Snakefile中的多个命名输入

时间:2018-10-17 17:43:02

标签: python-3.x snakemake

我想制作一个看起来像这样的管道:

  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'

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

1 个答案:

答案 0 :(得分:2)

  

重要的是,请注意,在此处引用规则a要求在文件中的规则b上方定义规则a,因为必须已经知道该对象。此功能还可以解决使用文件名时模棱两可的依赖关系。

Source

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