蛇制作错误:'Wildcards'对象没有属性'batch'



我不明白如何重新定义我的蛇形规则来修复下面的通配符问题。

忽略批处理的逻辑,它在python脚本内部是有意义的。理论上,我希望该规则对每批1-20运行。我在输出中为{batch}使用batch列表,在shell命令中,我使用{wildcards.batch}:


OUTDIR="my_dir/"
nBATCHES = 20
BATCHES = list(range(1,21)) # [1,2,3 ..20] list
[...]
rule step5:
input:
ids = expand('{IDLIST}', IDLIST=IDLIST)
output:
type1 = expand('{OUTDIR}/resources/{batch}_output_type1.csv.gz', OUTDIR=OUTDIR, batch=BATCHES),
type2 = expand('{OUTDIR}/resources/{batch}_output_type2.csv.gz', OUTDIR=OUTDIR, batch=BATCHES),
type3 = expand('{OUTDIR}/resources/{batch}_output_type3.csv.gz', OUTDIR=OUTDIR, batch=BATCHES)
shell:
"./some_script.py --outdir {OUTDIR} --idlist {input.ids}  --total_batches {nBATCHES} --current_batch {wildcards.batch}"

错误:

RuleException in rule step5  in line 241 of Snakefile:
AttributeError: 'Wildcards' object has no attribute 'batch', when formatting the following:
./somescript.py --outdir {OUTDIR} --idlist {input.idlist}  --totalbatches {nBATCHES} --current_batch {wildcards.batch}

手动执行单个批处理脚本看起来像这样(并且工作):(total_batches是一个常量;Current_batch应该迭代)

./somescript.py --outdir my_dir/ --idlist ids.csv --total_batches 20 --current_batch 1

您似乎想为BATCHES中的每个batch运行一次rule step5。所以你需要构建你的Snakefile来做到这一点。

在以下Snakefile运行rule all运行rule step5OUTDIRBATCHES的所有组合:

OUTDIR = "my_dir"
nBATCHES = 20
BATCHES = list(range(1, 21))  # [1,2,3 ..20] list
IDLIST = ["a", "b"] # dummy data, I don't have the original
rule all:
input:
type1=expand(
"{OUTDIR}/resources/{batch}_output_type1.csv.gz",
OUTDIR=OUTDIR,
batch=BATCHES,
),

rule step5:
input:
ids=expand("{IDLIST}", IDLIST=IDLIST),
output:
type1="{OUTDIR}/resources/{batch}_output_type1.csv.gz",
type2="{OUTDIR}/resources/{batch}_output_type2.csv.gz",
type3="{OUTDIR}/resources/{batch}_output_type3.csv.gz",
shell:
"./some_script.py --outdir {OUTDIR} --idlist {input.ids}  --total_batches {nBATCHES} --current_batch {wildcards.batch}"

在你的早期版本{batches}只是一个expand占位符,但不是通配符,规则只被调用一次。

代替rule all,这可以是一个后续规则,使用step5生成的一个或多个输出。

相关内容

  • 没有找到相关文章

最新更新