【发布时间】:2022-10-15 13:19:50
【问题描述】:
我正在 Snakemake 7.2.1 中开发管道。
我有一个保存在config.yaml 中的参数列表,我想将它们传递给脚本。同一个配置文件还包含一个我需要用来运行规则的列表。
config.yaml 的示例:
entry0:
- 1
- 2
- 3
entry1:
- 1
- 2
- 3
entry2:
- 1
- 2
- 3
做到了这一点:
configfile: "config.yaml"
output_folder="/output/path"
variable = config.get("entry0")
rule all:
input:
expand(f"{output_folder}/newfile_{{variable}}_{{p1}}_{{p2}}.txt",
variable = variable, p1 = config.get("entry1"), p2 = config.get("entry2"))
rule run_with_parameters:
input:
f"{output_folder}/file_{{variable}}.txt"
output:
f"{output_folder}/newfile_{{variable}}.{{params.param1}}_{{params.param2}}.txt"
params:
param1 = config.get("entry1"),
param2 = config.get("entry2")
shell:
"awk -v p1={params.param1} -v p2={params.param1} {input} > {output}"
但这不起作用,因为参数也在输入中传递给variable:
MissingInputException in line XX of Snakefile:
Missing input files for rule snp_stats_sibs_all_snps:
output: /output/path/newfile_1_1_1.txt
wildcards: variable=1.1_1
affected files:
/output/path/file_1.1_1.txt
我还尝试了Paramspace,结果相似(input: 中的所有内容也都得到了扩展)。
我希望 params 仅在我调用它们的输出中被解析,因为 3 个输入文件是相同的。
我怎样才能做到这一点?
【问题讨论】:
标签: parameters snakemake