我有一个如下所示的配置文件:
params:
- a:
- sample: sample_A
- var1: blood_a
- b:
- sample: sample_b
- var1: blood_b
如果有更多样本,可能不仅仅是a和b。参数嵌套时如何工作?我已经尝试过,因为我会用非嵌套的params做到这一点;扩展,格式化,lambda但我还没有成功。
这取决于具体情况。你能否在规则中充实你想如何使用这个结构?
如果您有一个输入文件和该文件的处理规则,但是在处理该文件时想要使用几组不同的参数,则可以设置如下内容:
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格式更容易捕获你的拼写错误和类型不匹配。