我有一个如下配置文件:
params:
- a:
- sample: sample_A
- var1: blood_a
- b:
- sample: sample_b
- var1: blood_b
在有更多样本可用的情况下,可以不仅仅是a和b。 嵌套参数时如何工作?我已经尝试过使用非嵌套参数;扩展,格式化,lambda,但我还没有成功。
答案 0 :(得分:1)
这实际上取决于上下文。请您充实您想如何在规则中使用此构造。
如果您只有一个输入文件和该文件的处理规则,但是要在处理该文件时使用几组不同的参数,则可以设置以下内容:
param_indices=params["params"].keys()
rule all:
input:
expand("results_{param_set}", param_set=param_indices)
rule process_me:
input:
"some_file"
output:
"results_{param_set}"
params:
sample=params[param_set]["sample"],
var1=params[param_set]["var1"]
run:
"""
touch {output}
"""
但是,设置配置文件稍有不同可能会更整洁。如果是制表符分隔的文件
param_index sample var1
a sample_A blood_a
b sample_b blood_b
..您可以使用此处描述的工作流程(https://snakemake.readthedocs.io/en/stable/snakefiles/configuration.html#tabular-configuration)。
## config.yaml
sample_file: samples.tsv
## samples.tsv
param_index sample var1
a sample_A blood_a
b sample_b blood_b
## Snakefile
import pandas as pd
configfile: "config.yaml"
samples = pd.read_table(
config["sample_file"]
).set_index(
"param_index", drop=False
)
rule all:
expand(
"results_{param_set}", param_set=samples["param_index"]
)
rule process_me:
input:
"some_file"
output:
"results_{param_set}"
params:
sample=params.loc(param_set, "sample"),
var1=params.loc(param_set, "var1")
run:
"""
touch {output}
"""
诚然,这不是如何使用表格配置的最佳示例。但是,与yaml格式相比,它可能更容易捕获打字错误和类型不匹配。