我第一次设置一个新的 Snakemake 管道,并遇到了代码问题。
\n\n我一开始就试图让它变得非常简单。
\n\n\nconfigfile: "config.yaml"\nSAMPLES, = glob_wildcards("data/{sample}_L008_R1_001.fastq.gz")\n\nrule all:\n input:\n expand("umi_labeled_fastq/{sample}.umi-extract.fq.gz", sample=SAMPLES)\nrule umi_tools_extract:\n input:\n "data/{sample}_L008_R1_001.fastq.gz"\n output:\n "umi_labeled_fastq/{sample}.umi-extract.fq.gz"\n shell:\n "umi_tools extract --extract-method=regex --bc-pattern=\xe2\x80\x9d(?P<umi_1>.{6})(?P<discard_1>.{4}).*\xe2\x80\x9d -I {input} -S {output}"\nRun Code Online (Sandbox Code Playgroud)\n\n这是我收到的输出:
\n\nJob counts:\n count jobs\n 1 all\n 6 umi_tools_extract\n 7\n\n[Thu May 16 16:55:05 2019]\nrule umi_tools_extract:\n input: data/YL5_S221_L008_R1_001.fastq.gz\n output: umi_labeled_fastq/YL5_S221.umi-extract.fq.gz\n jobid: 3\n wildcards: sample=YL5_S221\n\nRuleException in line 9 of /home/ryan/lexogen/test2.snakefile:\nIndexError: list index out of range\nRun Code Online (Sandbox Code Playgroud)\n\n如果我从正则表达式模式中删除这部分,那么我不会收到错误:
\n\n--bc-pattern=\xe2\x80\x9d(?P<umi_1>.{6})(?P<discard_1>.{4}).*\xe2\x80\x9d
然后我就没有错误了。我该如何解决这个问题?
\n您需要通过将方括号加倍来转义 shell 命令中的大括号{4}和。Snakemake 认为它们是某种类型的变量,但实际上它们不是,因此会出现错误。{6}
shell:\n "umi_tools extract --extract-method=regex --bc-pattern=\xe2\x80\x9d(?P<umi_1>.{{6}})(?P<discard_1>.{{4}}).*\xe2\x80\x9d -I {input} -S {output}"\nRun Code Online (Sandbox Code Playgroud)\n