在我的工作流程中,我有一个样本表,其中包含应该分析的所有样本+查找输入文件的路径+应该使用的参考基因组。所有这些都是特定于样本的。
在我的配置文件中,我有一个参考基因组的列表,以及每个参考基因组的文件路径列表,具体取决于工具。
在执行每个样本的比对的规则中,我需要加载其中的一些文件,但需要以特定于样本的方式加载,因为所有样本的参考基因组可能并不相同。
下面是我尝试解决这个问题的方法:
params: reference=lambda wildcards: table_samples['reference'][wildcards.sample],
chrom_sizes=config[reference]['chrom_sizes']但是,当我尝试像这样运行它时,我得到一个错误(直接在运行Snakemake时),指出chrom_sizes=...行中的reference没有定义。
有没有人有解决办法的想法?
编辑:一些更多的信息,因为我想我的意思并不是很清楚。这是我的配置文件的相关部分。
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。
我希望这能让事情变得更清楚。
发布于 2018-02-23 23:52:48
好的,从你的评论中得到的信息,我能够让它工作。我只需要稍微修改一下。
正如我在我最初的帖子中添加的那样,我实际上需要reference作为变量,以便单独提取每个样本的信息。
根据@JeeYem的建议,我尝试了以下操作:
chrom_sizes = config[table_samples['reference']['{sample}']]['chrom_sizes']
但是,在这种情况下似乎不可能使用{sample}。相反,我将其更改为:
chrom_sizes = lambda wildcards: config[table_samples['reference'][wildcards.sample]]['chrom_sizes']
就目前而言,它是有效的!感谢大家的贡献!
发布于 2018-02-23 20:16:01
这可能是一个丑陋的解决方案,但应该可以工作。
params:
reference = table_samples['reference']['{sample}']
chrom_sizes = config[table_samples['reference']['{sample}']]['chrom_sizes']您在params下定义了一个变量,并试图在参数本身中传递它的值;我不确定Snakemake是否能做到这一点。
发布于 2018-02-23 16:45:46
您忘了用引号将reference键引起来。就像您编写的一样,Python将其解释为变量。
chrom_sizes=config['reference']['chrom_sizes']https://stackoverflow.com/questions/48924830
复制相似问题