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']
目前,它有效!感谢大家的贡献!
在我的工作流程中,我有一个样本 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']
目前,它有效!感谢大家的贡献!