gpt4 book ai didi

python - Snakemake 使用字典值扩展

转载 作者:行者123 更新时间:2023-12-05 04:23:38 26 4
gpt4 key购买 nike

我有一个字典,其中键作为患者 ID,fastq 文件列表作为值。

patient_samples = {
"patientA": ["sample1", "sample2", "sample3"],
"patientB": ["sample1", "sample4", "sample5", "sample6"]
}

我想对齐每个 sample.fastq 并将对齐后的 .bam 文件输出到每个患者的目录中。我想要的结果目录结构是这样的:

├── patientA│   ├── sample1.bam│   ├── sample2.bam│   ├── sample3.bam├── patientB│   ├── sample1.bam│   ├── sample4.bam│   ├── sample5.bam│   ├── sample6.bam

Here I used lambda wildcards to get the samples for each patient using the "patient_samples" dictionary.

rule align:
input:
lambda wildcards: \
["{0}.fastq".format(sample_id) \
for sample_id in patient_samples[wildcards.patient_id]
]
output:
{patient_id}/{sample_id}.bam"
shell:
### Alignment command

我如何编写规则 all 以反射(reflect)每个患者只有特定样本对齐?我尝试引用字典键来指定示例:

rule all:
input:
expand("{patient_id}/{sample_id}.bam", patient_id=patient_samples.keys(), sample_id=patient_samples[patient_id])

但是,这会导致 NameError:名称“patient_id”未定义

还有其他方法吗?

最佳答案

错误是因为 expand 命令在列出 sample_id 值时不知道要使用的 patient_id 是什么:

expand(
"{patient_id}/{sample_id}.bam",
patient_id=patient_samples.keys(),
sample_id=patient_samples[patient_id])
^^^^^ Unknown

当您已经有了带有通配符值的列表时,使用 expand 很方便,在更复杂的情况下,最好使用 python:

list_inputs_all = [
f"{patient_id}/{sample_id}.bam"
for patient_id, sample_id
in patient_samples.items()
]

rule all:
input:
list_inputs_all

关于python - Snakemake 使用字典值扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73683630/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com