首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Snakemake中通配符中的通配符

Snakemake中通配符中的通配符
EN

Stack Overflow用户
提问于 2020-06-11 15:46:47
回答 1查看 150关注 0票数 0

我最近开始使用Snakemake。

我想要实现的是:我有一些需要独立修改的samples (规则index_vcf)。然后,样本组是另一个规则(analyse)的输入,我们为groups中的每个组得到一个输出。

我希望第二条规则运行两个命令:

代码语言:javascript
复制
some_script --input_files 'A2 Ah AL' --output ../out/A.out

代码语言:javascript
复制
some_script --input_files 'Banana BLM' --output ../out/B.out

如果只针对一个组,我知道如何做,但是如果这两个组都这样做,那么我在analyse中扩展的通配符analyse需要依赖于这个组,并得到错误。

代码语言:javascript
复制
unhashable type: 'list'

这是我的配置文件:

代码语言:javascript
复制
groups:
-   A
-   B

samples:
- A2
- Ah
- AL
- Banana
- BLM

grouped_samples:
  A: A2_mod, Ah_mod, AL_mod
  B: Banana_mod, BLM_mod

这是我的蛇形

代码语言:javascript
复制
configfile: "config_PCAWG.yaml"
samples = config["samples"]
groups = config["groups"]
grouped_samples = config["grouped_samples"]


rule all:
    input:
      expand("../out/{group}.out", group = groups)

rule index_vcf:
    input:
        "../data/{sample}"
    output:
        "../data/{sample}_mod"
    shell:
        "tabix -f {input}"

rule analyse:
    input:
        expand("{sample_from_group}", sample_from_group=grouped_samples[{group}].split())
    output:
         "../out/{group}.out
    shell:
        "some_script --input_files '{input}' --output {output}"
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-11 18:31:20

首先,您需要纠正错误打印(例如,有一个字符串,没有关闭引号)。接下来,有一个逻辑错误,因为没有任何规则产生与模式"../out/{group}.out"匹配的任何内容。你是说"../data/{group}.out"

现在是主要的部分。这是一个无效的语法:

代码语言:javascript
复制
        expand("{sample_from_group}", sample_from_group=grouped_samples[{group}].split())

您的意思是使用通配符并生成扩展的lambda (或函数):

代码语言:javascript
复制
rule analyse:
    input:
        lambda wildcards: expand("{sample_from_group}",
                             sample_from_group=grouped_samples[wildcards.group].split())
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62328246

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档