我正在使用snakemake来开发管道。我正在尝试为目标中的每个文件创建符号链接到新目标。我不知道会有多少文件,所以我正在尝试使用动态输出。
rule source:
output: dynamic('{n}.txt')
run:
source_dir = config["windows"]
source = os.listdir(source_dir)
for w in source:
shell("ln -s %s/%s source/%s" % (source_dir, w, w))
这是我得到的错误:
WorkflowError: “目标规则可能不包含通配符。请指定具体文件或没有通配符的规则。”
问题是什么?
答案 0 :(得分:5)
对于使用动态功能,您必须得到另一条规则,其中输入是动态文件,如下所示:
rule target :
input : dynamic('{n}.txt')
rule source:
output: dynamic('{n}.txt')
run:
source_dir = config["windows"]
source = os.listdir(source_dir)
for w in source:
shell("ln -s %s/%s source/%s" % (source_dir, w, w))
像这样,Snakemake会知道通配符的属性。
使用通配符时提示您始终需要定义它。在目标规则的输入中调用dynamic将定义通配符' {n}'