我正在尝试实现以下目标:将我的工作流程应用于一组染色体,每个染色体都有多种方法。因此,输入始终是一个带有一个通配符
chr
的文件,而输出将具有两个 chr & method
。问题是,好像
{chr}_{method}_rslts.csv
,snakemake 期望 input 有这两个通配符{chr}_rslts_{method}.csv
,snakemake 会抱怨缺少规则的输入你能帮忙吗
rule all:
input:
expand(config["outdir"] + "/{chr}_{method}_rslts.csv", chr = ["chr1", "chr2", "chr3"], method = ["method1", "method2"])
rule example_rule:
input:
config["indir"] + "/{chr}_fltrd.csv",
output:
config["outdir"] + "/{chr}_{method}_rslts.csv",
shell:
"""
touch {output}
"""
当输出的通配符比输入的通配符多时,我没有发现任何问题。特别是你的例子
snakemake --version # kind of old :D
7.8.5
snakemake -nq
Building DAG of jobs...
Job stats:
job count min threads max threads
------------ ------- ------------- -------------
all 1 1 1
example_rule 6 1 1
total 7 1 1
大概在真正的规则中,您在命令中使用 method 的值。
相反,输入中的通配符多于输出中的通配符,您必须使用输入函数根据输出通配符设置所有输入通配符。请记住,snakemake 确定需要“向后”运行的内容,从请求的输出到输入,因此输出必须比输入具有更多的通配符。
一个相关的问题是,如果您有多个输出,其中一些输出不使用所有通配符。假设你的规则是:
rule example_rule:
input:
config["indir"] + "/{chr}_fltrd.csv",
output:
config["outdir"] + "/{chr}_{method}_rslts.csv",
config["outdir"] + "/{chr}_summary.csv",
这是一个错误,因为“通用”文件会在写入时发生冲突并导致未知的问题。错误消息解释了这一点。如果这不能解决您的问题,请澄清您的问题。