我在编写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
提前致谢
问题是通配符对象
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}"