我想制作一个看起来像这样的管道:
这是我所在位置的基本示例
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
部分中使用语法来解决此问题,那就太好了。否则,将很乐意收到任何关于更好方法的想法。
答案 0 :(得分:2)
重要的是,请注意,在此处引用规则a要求在文件中的规则b上方定义规则a,因为必须已经知道该对象。此功能还可以解决使用文件名时模棱两可的依赖关系。
也就是说,在您的示例中,rule master_list
应该在rule extract_master
之前定义。