找不到通配符

问题描述 投票:0回答:1

所以我对通配符有点困惑。我想获得具有扩展功能的输入文件列表。这些文件存在并由其他规则使用这些“通配符”创建 -

{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 到底把什么称为通配符?我很困惑..

snakemake
1个回答
0
投票

我认为错误来自您的 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}
        """
© www.soinside.com 2019 - 2024. All rights reserved.