如何在关键字wildcard_constraints中使用通配符

时间:2019-12-06 14:04:21

标签: wildcard snakemake

例如,我有以下通配符。

dataset = ['A1', 'A2', 'A3', 'B1', 'B2', 'B3']
group = ['A', 'B']

我正试图将我的数据集与我的小组禁止使用。例如,我要创建

A1 / file.A.txt A2 / file.A.txt A3 / file.A.txt B1 / file.B.txt ...

我写了一条下面的规则,希望可以实现

rule complex_conversion:
    input:
        "{dataset}/inputfile"
    output:
        "{dataset}/file.{group}.txt"
    wildcard_constraints:
        dataset = {group} + '\d+'
        #dataset = {wildcards.group} + '\d+'
    shell:
        "somecommand --group {wildcards.group}  < {input}  > {output}"

糟糕,我收到了错误

TypeError:unhashable type: 'list'
#NameError: name 'wildcards' is not defined

似乎{group}被视为传递关键字wildcard_constraints的列表。

是否有任何方法可以在wildcards_constrain中使用通配符,也可以使用其他方法将数据集映射到组。

1 个答案:

答案 0 :(得分:1)

这不能回答您的问题,但可能会有所帮助...如果您的输出文件列表是datasetgroup的组合,我将首先创建该列表,然后将其用作输出文件列表:

dataset = ['A1', 'A2', 'A3', 'B1', 'B2', 'B3']
group = ['A', 'B']

# Use a for-loop or whatever to create this list:
datagrp = ['A1/file.A.txt','A2/file.A.txt', 'A3/file.A.txt', 'B1/file.B.txt']

wildcard_constraints:
    # This prevents wildcards to be interpreted as regexes
    dataset = '|'.join([x for x in dataset]),
    group = '|'.join([x for x in group])

rule all:
    input:
        datagrp,

rule complex_conversion:
    input:
        "{dataset}/inputfile"
    output:
        "{dataset}/file.{group}.txt"
    shell:
        "somecommand --group {wildcards.group}  < {input}  > {output}"