所以我对通配符有点困惑。我想获得具有扩展功能的输入文件列表。这些文件存在并由其他规则使用这些“通配符”创建 -
{output_name} {split_index}
.
我猜只有 split_index 是一个“真正的”通配符,因为 output_name 是在我的另一个扩展中定义的
rule all
:
expand(["results/{output_name}_1/{output_name}_1.bed",
"results/{output_name}_2/{output_name}_2.bed",
"results/{output_name}.txt"],
output_name=config["output_name_prefix"])
前两个文件是使用另一个规则生成的,该规则输出与我在此处展开的字符串相同的字符串:
def get_values(wildcards):
expand(
"results/{output_name}_{split_index}/{output_name}_{split_index}.bed",
output_name=wildcards.output_name, split_index=wildcards.split_index)
rule merge_file_list:
input:
get_values
output:
"results/{output_name}.txt"
shell:
"for s in {input}; do ${{s}} > {output}; done"
我收到一条错误消息:
Error:
AttributeError: 'Wildcards' object has no attribute 'split_index'
Wildcards:
output_name=Homo_sapiens_ch19
这个错误是什么意思甚至意味着我认为 output_name 不是文档中的通配符:
snakemake 到底把什么称为通配符?我很困惑..
我认为错误来自您的 get_value 函数。
OUTNAME=["Homo_sapiens_ch19"]
INDEXEND=["1","2"]
rule all:
input:
expand("results/{output_name}.txt", output_name = OUTNAME)
rule create_files:
output:
touch("results/{output_name}_{split_index}/{output_name}_{split_index}.bed")
rule merge_file_list:
input:
expand("results/{output_name}_{split_index}/{output_name}_{split_index}.bed", output_name = OUTNAME, split_index = INDEXEND)
output:
"results/{output_name}.txt"
shell:
"""
echo {input} | sed 's/ /\\n/g' > {output}
"""