在我的工作流程中,我有一个样本表,其中包含应该分析的所有样本+找到输入文件的路径+应该使用的参考基因组。所有这些都是特定于样本的。
在我的配置文件中,我有一个参考基因组列表,每个参考基因组都有一个文件路径列表,具体取决于工具。
在执行每个样本对齐的规则中,我需要以特定于样本的方式加载其中一些文件,因为参考基因组可能与所有样本不同。
以下是我试图解决的问题:
params: reference=lambda wildcards: table_samples['reference'][wildcards.sample],
chrom_sizes=config[reference]['chrom_sizes']
但是,当我尝试像这样运行时,我收到一个错误(直接在运行Snakemake时),说明reference
行chrom_sizes=...
未定义。
有人知道解决方法吗?
编辑:更多信息,因为我想我的意思并不是很清楚。这是我的配置文件的相关部分。
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: '...'
以下是样本表的一个示例。
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
。
我希望这会让它更加清晰。
答案 0 :(得分:1)
这可能是一个丑陋的解决方案,但应该有效。
params:
reference = table_samples['reference']['{sample}']
chrom_sizes = config[table_samples['reference']['{sample}']]['chrom_sizes']
您在params
下定义了一个变量,并尝试在params本身内传递其值;我不确定Snakemake可以做到这一点。
答案 1 :(得分:0)
您忘记在reference
键周围加上引号。就像你编写它一样,Python将它解释为一个变量。
chrom_sizes=config['reference']['chrom_sizes']
答案 2 :(得分:0)
好的,从您的评论中获取信息,我能够使其发挥作用。我只需要稍微修改它们。
当我添加到原始帖子中时,我实际上需要reference
作为变量才能单独提取每个样本的信息。
正如@JeeYem建议的那样,我试图做到以下几点:
chrom_sizes = config[table_samples['reference']['{sample}']]['chrom_sizes']
但是,似乎无法在此上下文中使用{sample}
。相反,我改变了它:
chrom_sizes = lambda wildcards: config[table_samples['reference'][wildcards.sample]]['chrom_sizes']
现在,它有效!感谢大家的贡献!