如何修复snakemake中的“ IndexError:列表索引超出范围”

时间:2019-05-17 00:02:23

标签: python snakemake

我是第一次建立新的snakemake管道,并且遇到了代码问题。

我从一开始就试图使其变得非常简单。


configfile: "config.yaml"
SAMPLES, = glob_wildcards("data/{sample}_L008_R1_001.fastq.gz")

rule all:
    input:
        expand("umi_labeled_fastq/{sample}.umi-extract.fq.gz", sample=SAMPLES)
rule umi_tools_extract:
    input:
        "data/{sample}_L008_R1_001.fastq.gz"
    output:
        "umi_labeled_fastq/{sample}.umi-extract.fq.gz"
    shell:
        "umi_tools extract --extract-method=regex --bc-pattern=”(?P<umi_1>.{6})(?P<discard_1>.{4}).*” -I {input} -S {output}"

这是我收到的输出:

Job counts:
    count   jobs
    1   all
    6   umi_tools_extract
    7

[Thu May 16 16:55:05 2019]
rule umi_tools_extract:
    input: data/YL5_S221_L008_R1_001.fastq.gz
    output: umi_labeled_fastq/YL5_S221.umi-extract.fq.gz
    jobid: 3
    wildcards: sample=YL5_S221

RuleException in line 9 of /home/ryan/lexogen/test2.snakefile:
IndexError: list index out of range

如果我从正则表达式模式中删除此部分,则不会出现错误:

--bc-pattern=”(?P<umi_1>.{6})(?P<discard_1>.{4}).*”

然后我没有任何错误。我该如何解决?

1 个答案:

答案 0 :(得分:0)

您需要通过doubling the brackets在shell命令中对{4}{6}的括号进行转义。 Snakemake认为它们不是某种类型的变量,因此会导致错误。

shell:
    "umi_tools extract --extract-method=regex --bc-pattern=”(?P<umi_1>.{{6}})(?P<discard_1>.{{4}}).*” -I {input} -S {output}"