繁体   English   中英

访问嵌套参数snakemake

[英]Access nested parameters snakemake

我有一个看起来像这样的配置文件:

params:
- a:
    - sample: sample_A
    - var1: blood_a
- b:
    - sample: sample_b
    - var1: blood_b

如果有更多样本可用,可能不只是a和b。 嵌套参数时如何工作? 我已经尝试过使用非嵌套参数; 扩展,格式,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格式相比,它可能更容易捕获错别字和类型不匹配的内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM