访问嵌套参数snakemake

问题描述 投票:0回答:1

我有一个如下所示的配置文件:

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

如果有更多样本,可能不仅仅是a和b。参数嵌套时如何工作?我已经尝试过,因为我会用非嵌套的params做到这一点;扩展,格式化,lambda但我还没有成功。

python snakemake
1个回答
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格式更容易捕获你的拼写错误和类型不匹配。

© www.soinside.com 2019 - 2024. All rights reserved.