Snakemake:从配置中提取样本特定信息 sheet

Snakemake: Pull sample-specific information from config sheet

在我的工作流程中,我有一个样本 sheet,其中包含应该分析的所有样本 + 查找输入文件的路径 + 应该使用的参考基因组。所有这些都是特定于示例的。

在我的配置文件中,我有一个参考基因组列表,每个参考基因组都有一个文件路径列表,具体取决于工具。

在执行每个样本比对的规则中,我需要以特定于样本的方式加载其中一些文件,因为所有样本的参考基因组可能都不相同。

以下是我尝试解决此问题的方法:

  params:  reference=lambda wildcards: table_samples['reference'][wildcards.sample],
           chrom_sizes=config[reference]['chrom_sizes']

然而,当我像这样尝试运行时,我得到一个错误(当运行ning Snakemake时直接)说reference在[=15=行] 未定义。

有人知道解决方法吗?

编辑:更多信息,因为我想我的意思不是很清楚。这是我的配置文件的相关部分。

hg19:
  bwa: 'path/to/hg19/bwa/reference'
  samtools: 'path/to/hg19/samtools/reference'
  chrom_sizes: '...'

mm9:
  bwa: 'path/to/mm9/bwa/reference'
  samtools: 'path/to/mm9/samtools/reference'
  chrom_sizes: '...'

这里是示例 sheet。

name    path            reference
sample1 path/to/sample1 mm9

因此,在 reference=lambda wildcards: table_samples['reference'][wildcards.sample] 行中,我加载了用于当前示例的相应参考。然后,在 chrom_sizes=config[reference]['chrom_sizes'] 中,我需要使用 reference 作为变量来获取 chrom_sizes 作为正确的参考基因组。

我希望这能让它更清楚一点。

您忘记在 reference 键两边加上引号。就像你写的那样,Python 将它解释为一个变量。

chrom_sizes=config['reference']['chrom_sizes']

这可能是一个丑陋的解决方案,但应该可行。

params:
    reference = table_samples['reference']['{sample}']
    chrom_sizes = config[table_samples['reference']['{sample}']]['chrom_sizes']

您在 params 下定义了一个变量,并试图在 params 本身中传递它的值;我不确定 Snakemake 能否做到这一点。

好的,根据您评论中的信息,我能够让它发挥作用。我只需要稍微修改一下。

正如我在原来的 post 中添加的那样,我实际上需要 reference 作为一个变量,以便单独提取每个样本的信息。

正如@JeeYem 所建议的,我尝试执行以下操作:

chrom_sizes = config[table_samples['reference']['{sample}']]['chrom_sizes']

但是,似乎无法在这种情况下使用 {sample}。相反,我将其更改为:

chrom_sizes = lambda wildcards: config[table_samples['reference'][wildcards.sample]]['chrom_sizes']

目前,它有效!感谢大家的贡献!