我正在尝试使用 Snakemake 制作一个简单的管道,从网络上下载两个文件,然后将它们合并到一个输出中。
我认为可行的是以下代码:
dwn_lnks = {
'1': 'https://molb7621.github.io/workshop/_downloads/sample.fa',
'2': 'https://molb7621.github.io/workshop/_downloads/sample.fa'
}
import os
# association between chromosomes and their links
def chromo2link(wildcards):
return dwn_lnks[wildcards.chromo]
rule all:
input:
os.path.join('genome_dir', 'human_en37_sm.fa')
rule download:
output:
expand(os.path.join('chr_dir', '{chromo}')),
params:
link=chromo2link,
shell:
"wget {params.link} -O {output}"
rule merger:
input:
expand(os.path.join('chr_dir', "{chromo}"), chromo=dwn_lnks.keys())
output:
os.path.join('genome_dir', 'human_en37_sm.fa')
run:
txt = open({output}, 'a+')
with open (os.path.join('chr_dir', "{chromo}") as file:
line = file.readline()
while line:
txt.write(line)
line = file.readline()
txt.close()
此代码返回错误:No values given for wildcard 'chromo'. in line 20
另外,在合并规则中,运行中的Python代码不起作用。
Snakemake 包中的教程没有涵盖足够的示例来让非计算机科学家了解详细信息。如果有人知道学习如何使用snakemake的好资源,我将不胜感激,如果他们能够分享:)。
问题是你有一个expand
规则输出中的函数download
没有定义通配符的值{chromo}
。我想你真正想要的是
rule download:
output:
'chr_dir/{chromo}',
params:
link=chromo2link,
shell:
"wget {params.link} -o {output}"
没有expand
. The expand
函数只需要总计的通配符,就像您在规则中所做的那样merger
.
另请参阅官方 Snakemake 教程,其中详细解释了这一点。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)