我在Snakemake问题上停留了一会儿。
建议我有一个像这样的字典:
dict_A = {A:"id1","id2","id3", B:"id2","id3","id4","id5", C:"id1","id4","id5"}
而且我想编写类似的规则:
input:
"{dict_A.keys()}/{dict_A[key]}_R1.txt"
output:
"{dict_A.keys()}/{dict_A[key]}_R1_filter.txt"
shell:
"XXX {input} > {output}"
虽然,我尝试在google和StackOverflow上进行搜索,但无法确定此问题。真的希望有人可以帮助我!
非常感谢!
Snakemake的工作原理是提供我们期望它生成的最终输出,并规定如何从某些输入中产生输出。当我们在命令行上未定义任何输出时,snakemake将尝试在您的Snakefile中生成第一条规则的输入。因此,我们定义了一个rule all
,将要生成的内容作为输入:
dict_A = {'A': ["id1","id2","id3"],
'B': ["id2","id3","id4","id5"],
'C': ["id1","id4","id5"]}
all_input = []
for key, values in dict_A.items():
for value in values:
all_input.append(f"{key}/{value}_R1_filter.txt")
rule all:
input:
all_input
现在,我们必须更改规则,以便它可以为要生成的输出填写正确的通配符:
rule do_sth_cool:
input:
"{key_wc}/{value_wc}_R1.txt"
output:
"{key_wc}/{value_wc}_R1_filter.txt"
shell:
"XXX {input} > {output}"
再次查看docs,并使自己熟悉snakemake的基本概念。