我有一本像下面这样的字典:
data = {
"group1": ["a", "b", "c"],
"group2": ["x", "y", "z"]
}
我想使用 expand 来分别获取键和它们的值之间的所有组合 在“全部统治”中,s.t.预期的输出文件是例如"group1/a.txt", "group1/b.txt", ... "group2/x.txt, "group2/y.txt" ...
rule all:
input:
expand("{group}/{sub_group}.txt", group = ???, sub_group = ???)
规则“some_rule”需要这个:
rule some_rule:
input: "single_input_file.txt"
output: "{group}/{sub_group}.txt"
params:
group=group, # how do I extract these placeholders?
sub_group=sub_group
script:
"some_script.R"
我需要
group
和sub_group
通配符的原因是因为我需要将它们传递给规则“some_rule”的params
我尝试使用列表理解对“全部规则”中所需的所有输出文件进行硬编码,但是占位符未在通配符中定义,我无法将它们传递给参数。
所以我想我需要使用
expand
定义“规则所有”输入文件,但在这里我不知道如何获得正确的文件,因为我需要在“group1”和它的之间单独执行组合值和“group2”及其值。
我也不能为规则“some_rule”使用输入函数,因为它只有一个单一的静态输入文件。
在 StackOverflow 上的其他类似问题中,要么没有组合问题,要么他们使用纯 python 创建“rule_all”的输入文件,这让我失去了通配符。
data = {
"group1": ["a", "b", "c"],
"group2": ["x", "y", "z"]
}
files = sum(
[
[f"{key}/{value}.txt" for value in values] for key,values in data.items()],
[]
)
print(files)
我想你打算在每个文件上运行一个程序?如果是这样:
for file in files:
# run script on `file`
你可以使用这个:
rule some_rule:
input: "single_input_file.txt"
output: "{group}/{sub_group}.txt"
script:
"some_script.R"
并访问 R 中通配符
{group}
和 {subgroups}
的值
脚本与例如snakemake@wildcards[['group']]
(未测试,但我认为
应该这样做)。
或者我认为你可以:
params:
group='{group}'
sub_group='{sub_group}',