【问题标题】:Wildcard within wildcard in SnakemakeSnakemake中通配符内的通配符
【发布时间】:2020-06-12 17:08:00
【问题描述】:

我最近才开始使用 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

如果只针对一个组,我知道该怎么做,但是如果我为两个组都这样做,那么我在analyse 中扩展的通配符sample_from_group 需要依赖于组,我得到错误

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】:

    首先,您需要更正打印错误(例如,有一个没有结束引号的字符串)。接下来,存在一个逻辑错误,即没有规则生成与模式"../out/{group}.out" 匹配的任何内容。你是说"../data/{group}.out"吗?

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

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

    您的意思是接受通配符并产生扩展的 lambda(或函数):

    rule analyse:
        input:
            lambda wildcards: expand("{sample_from_group}",
                                 sample_from_group=grouped_samples[wildcards.group].split())
    

    【讨论】:

    • 谢谢!我已经修改了输出文件夹的拼写错误../data -> ../out
    猜你喜欢
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    • 2022-12-17
    • 2020-12-15
    • 2023-03-20
    • 1970-01-01
    • 2022-07-22
    • 2021-12-03
    相关资源
    最近更新 更多