如何在Snakemake规则中使用字典值和键

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

我在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上进行搜索,但无法确定此问题。真的希望有人可以帮助我!

非常感谢!

python snakemake
1个回答
0
投票

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的基本概念。

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