首先,这可能是Snakemake and pandas syntax的副本。但是,我仍然很困惑,所以我想再次解释。
在Snakemake中,我加载了一个带有几列的示例表。其中一列称为“ Read1”,其中包含特定于样本的读取长度。我想分别为每个样本获取此值,因为它可能有所不同。
我期望的是这样的:
rule mismatch_profile:
input:
rseqc_input_bam
output:
os.path.join(rseqc_dir, '{sample}.mismatch_profile.xls')
conda:
"../envs/rseqc.yaml"
params:
read_length = samples.loc['{sample}']['Read1']
shell:
'''
#!/bin/bash
mismatch_profile.py -i {input} -o {rseqc_dir}/{wildcards.sample} -l {params.read_length}
但是,这不起作用。由于某些原因,我不允许在标准Pandas语法中使用{sample},但出现此错误:
KeyError in line 41 of /rst1/2017-0205_illuminaseq/scratch/swo-406/test_snakemake_full/rules/rseqc.smk:
'the label [{sample}] is not in the [index]'
我不明白为什么这行不通。我读到我也可以使用lambda函数,但由于它们仍然需要{sample}作为输入,因此我并不十分清楚。
有人可以帮助我吗?
答案 0 :(得分:2)
您可以使用lambda函数
params:
read_length = lambda wildcards: samples.loc[wildcards.sample, 'Read1']