Parameters 通配符作为snakemake中的参数?

Parameters 通配符作为snakemake中的参数?,parameters,wildcard,snakemake,Parameters,Wildcard,Snakemake,我刚进入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.pr

我刚进入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

至少有些问题不是定义输出。也许像这样的方法会奏效:

#配置文件:“config.yaml”
蛋白质=列表(x.strip().split()[1]用于打开的x(配置['protein_id']))
规则链接:
输出:“{protein}\u genomes.txt”
参数:
prot=lambda通配符:蛋白质[通配符.蛋白质]
外壳:
'esearch-db protein-query{params.prot}|'
“elink-db程序集-目标nuccore |”
“efetch-格式docsum |”
'xtract-模式文档摘要-元素标题,标题'
“>{output}”
这将抛出一个错误,因为
蛋白质
是一个列表,您似乎将其用作命令

一般来说,使用snakemake附加到文件不是一个好主意,因为snakemake可以通过文件和修改时间工作。在追加文件时,无法知道是否需要重新生成文件。最好添加另一条规则来连接所有文件


最后,对于长命令,我喜欢将shell指令拆分为多行,以便于阅读和修改。外壳内容被视为在一个块中,并连接在一起。

感谢您提供的所有提示!我还尝试修改params行,以便现在使用list:
prot=lambda通配符:proteins
,但随后该命令将尝试同时运行整个列表(
命令'esearch-db protein-query WP_136129796.1 WP_136130620.1 WP_159990234.1 WP_136132112.1 WP_136131313.1 WP_095034915.1 WP_006708696.1 PAV05377.1 WP_015873789.1 WP_100096494.1 | elink-db assembly-target nuccore efetch-format docsum | xtract-pattern文档摘要-元素标题>genomes.txt'返回非零退出us 255
)有什么想法吗?我还尝试使用
prot=expand({protein}',protein=proteins)
,但没有成功。它还尝试一次使用整个列表。您只想查询蛋白质吗?
prot=lambda通配符:通配符。protein
?否则请编辑您的问题以澄清您的意图。