在Snakemake中,通配符中的通配符。

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

我最近开始使用Snakemake。

我想达到的目的是这样的。我有一些 samples 需要单独修改(规则 index_vcf). 然后,样本组是另一个规则的输入(analyse),我们得到每组的输出,在 groups.

我想让第二条规则运行两个命令。

some_script --input_files 'A2 Ah AL' --output ../out/A.out

和...

some_script --input_files 'Banana BLM' --output ../out/B.out

如果只针对一组,我知道该怎么做,但如果同时针对两组,那么通配符 sample_from_group 我正在扩展的 analyse 需要依赖于组,我得到了错误的消息。

unhashable type: 'list'

这是我的配置文件。

groups:
-   A
-   B

samples:
- A2
- Ah
- AL
- Banana
- BLM

grouped_samples:
  A: A2_mod, Ah_mod, AL_mod
  B: Banana_mod, BLM_mod

这是我的Snakefile

configfile: "config_PCAWG.yaml"
samples = config["samples"]
groups = config["groups"]
grouped_samples = config["grouped_samples"]


rule all:
    input:
      expand("../out/{group}.out", group = groups)

rule index_vcf:
    input:
        "../data/{sample}"
    output:
        "../data/{sample}_mod"
    shell:
        "tabix -f {input}"

rule analyse:
    input:
        expand("{sample_from_group}", sample_from_group=grouped_samples[{group}].split())
    output:
         "../out/{group}.out
    shell:
        "some_script --input_files '{input}' --output {output}"
python bioinformatics snakemake
1个回答
1
投票

首先,你需要纠正错误的打印(例如,有一个字符串没有闭合引号)。其次,有一个逻辑错误,即没有规则产生任何与模式相匹配的内容。"../out/{group}.out". 你是说... "../data/{group}.out"?

现在是主要部分。这是一种无效的语法。

        expand("{sample_from_group}", sample_from_group=grouped_samples[{group}].split())

你的意思是一个lambda(或一个函数)... ...接受一个通配符并产生一个expand:

rule analyse:
    input:
        lambda wildcards: expand("{sample_from_group}",
                             sample_from_group=grouped_samples[wildcards.group].split())
© www.soinside.com 2019 - 2024. All rights reserved.