例如,我有以下通配符。
dataset = ['A1', 'A2', 'A3', 'B1', 'B2', 'B3']
group = ['A', 'B']
我试图将我的数据集与我的小组相提并论。 例如,我想创建
A1/文件。A.txt A2/文件。A.txt A3/文件。A.txt B1/文件。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中使用通配符或替代方法将数据集映射到组。
这不能回答你的问题,但也许它有帮助......如果您的输出文件列表是dataset
和group
的组合,我会先创建该列表,然后将其用作输出文件列表:
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}"