Как упомянул @dariober, есть объекты wildcards
, но они доступны только в части run / shell, но доступ к ним можно получить с помощью функции ввода в input
.
Вот пример реализации, которая расширит ввод на основе wildcards.ref
:
rule all:
input: expand("{dataset}/{sample}.{ref}.{state}.{case}.endresult.tsv", dataset=["D1", "D2"], sample=["S1", "S2"], ref=["R1", "R2"], state=["STATE1", "STATE2"], case=["C1", "C2"])
my_list = {"R1": [1, 2, 3], "R2": ["s1", "s2"]}
rule process_files:
input:
lambda wildcards: expand(
"{{dataset}}/{{sample}}.{{ref}}.{{state}}.{{case}}.myresult.{name}.tsv", name=my_list[wildcards.ref])
output:
"{dataset}/{sample}.{ref}.{state}.{case}.endresult.tsv"
shell:
"echo '{input}' > {output}"
Если вы реализуете его как пример функции lambda
выше, это должно решить проблему, о которой вы упомянули:
Функция работала, но не смогла разрешить переменную между двойными фигурными скобками, поэтому запросит ввод для {dataset} / {sample}. {Ref}. {State}. {Case} и выдаст ошибку.