如何根据字典值重命名样本

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

我在编写snakemake规则来更改样本名称时遇到了一些麻烦。在使用 Porechop 进行多路分离并使用 Filtlong 进行一些基本修剪后,我想将样本的名称更改为BC01_trimmed.fastq.gz 至 E_coli_trimmed.fastq.gz。我的想法是,在我的配置文件中有一个字典,其中每个样本都链接到所使用的条形码。

基于this之前提出的问题,我编写了这段示例代码。

mydictionary = {
    'BC01': 'bacteria_A',
    'BC02': 'bacteria_B'
}

rule all:
    input:
        expand('{bacteria}_trimmed.fastq.gz', bacteria=mydictionary.values())

rule changeName:
    input:
        '{barcode}_trimmed.fastq.gz'
    params:
        value=lambda wcs: mydictionary[wcs.f]
    output:
        '{params.value}_trimmed.fastq.gz'
    shell:
        "mv {input} {output}"

但是我收到错误:

MissingInputException in rule all in file /Snakefile, line :
Missing input files for rule all:
    affected files:
        bacteria_B_trimmed.fastq.gz
        bacteria_A_trimmed.fastq.gz

提前致谢

dictionary workflow bioinformatics snakemake
1个回答
0
投票

问题是通配符对象

wcs
没有通配符
f
,而是有
barcode
。另外,我认为您不需要这里的 params 指令。这就是我要做的(未经测试):

rule changeName:
    input:
        fq='{barcode}_trimmed.fastq.gz',
    output:
        fq=lambda wcs: '%s_trimmed.fastq.gz' % mydictonary[wcs.barcode],
    shell:
        "mv {input.fq} {output.fq}"
© www.soinside.com 2019 - 2024. All rights reserved.