如何解决通配符作为snakemake中的参数?
我刚接触过蛇制作人,并且已经坚持了一段时间: 我有此规则,我想将列表的元素(从文件存储)用作参数。这是我最接近的方法,但是它不起作用。
#configfile: 'config.yaml'
proteins = list(x.strip().split()[1] for x in open(config['protein_ids']))
rule links:
params:
prot = lambda wildcards: proteins[wildcards.protein]
shell:
'esearch -db protein -query {params.prot} | elink -db assembly -target nuccore | efetch -format docsum | xtract -pattern DocumentSummary -element Caption,Title >> genomes.txt'
错误是:
AttributeError: 'Wildcards' object has no attribute 'protein'
Wildcards:
任何提示将不胜感激! 最好, D。
解决方法
欢迎来到Snakemake。
至少您的某些问题未定义输出。也许这样的事情会起作用:
# configfile: 'config.yaml'
proteins = list(x.strip().split()[1] for x in open(config['protein_ids']))
rule links:
output: '{protein}_genomes.txt'
params:
prot = lambda wildcards: proteins[wildcards.protein]
shell:
'esearch -db protein -query {params.prot} | '
'elink -db assembly -target nuccore | '
'efetch -format docsum | '
'xtract -pattern DocumentSummary -element Caption,Title '
'> {output}'
这将引发错误,因为proteins
是一个列表,似乎您将其用作字典。
通常,用snakemake附加到文件不是一个好主意,因为snakemake会在文件和修改时间中起作用。当您追加文件时,无法知道是否需要重建文件。最好添加另一个规则来串联所有文件。
最后,对于长命令,我喜欢将shell指令拆分为多行,以使其更易于阅读和修改。将外壳内容物当作一个块并连接在一起。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。