【问题标题】:Snakemake: expanding only a subset of wildcardsSnakemake:仅扩展通配符的子集
【发布时间】:2023-03-20 12:17:01
【问题描述】:

我找不到这个可能很简单的问题的解决方案:

我有这个蛇文件,它首先生成以下文件:

  • 数据/sample1_P1.txt

  • 数据/sample1_P2.txt

  • 数据/sample2_P1.txt

  • 数据/sample2_P2.txt

在下一步中,它只是将文件连接到一个文件concatenated/concatenated.txt

这是最小的、可重现的例子:

pairs = {"P1" : "P1", "P2" : "P2"}

samples = {
    "sample1": "sample1",
    "sample2": "sample2"
}

rule all:
    input: "concatenated/concatenated.txt"

rule get_txt_files:
    output:
        "data/{sample}_{pair}.txt"
    shell:
        """
        echo 1 > {output}
        """

rule concatenate:
  input:
    expand("data/{sample}_{pair}.txt", sample=samples, \
        pair=pairs)
  output:
    "concatenated/concatenated.txt"
  shell:
    "cat {input} > {output};"

我的问题很简单:如何修改规则concatenate,以便连接具有相同样本名称的文件?

期望的输出是:

  • 级联/sample1.txt

  • 级联/sample2.txt

任何帮助将不胜感激。

编辑

我有一个非常相似的后续问题,所以我认为没有必要再次提出新问题:

如果我的预期输出如下:

  • data/sample1/sample1_P1

  • data/sample1/sample1_P2

  • data/sample2/sample2_P1

  • data/sample2/sample2_P2

明确一点:我只想创建一个新目录并将文件移动到该定制目录中。

这样做似乎很直观:

pairs = {"P1" : "P1", "P2" : "P2"}

samples = {
    "sample1": "sample1",
    "sample2": "sample2"
}

rule all:
    input: expand("data/{sample}/{sample}_{pair}.txt", sample=samples, pair = pairs)

rule get_txt_files:
    output:
        "data/{sample}_{pair}.txt"
    shell:
        """
        echo 1 > {output}
        """

rule reorganise:
  input:
    expand("data/{{sample}}_{pair}.txt", \
        pair=pairs)
  output:
    "data/{sample}/{sample}_{pair}.txt"
  shell:
    "mv {input} data/{wildcards.sample}/.;"

你能发现问题吗?

提前非常感谢

【问题讨论】:

标签: python bioinformatics snakemake


【解决方案1】:
rule concatenate:
  input:
    expand("data/{{sample}}_{pair}.txt", pair=pairs)
  output:
    "concatenated/{sample}.txt"
  shell:
    "cat {input} > {output};"

在评论中回答q:

from snakemake.io import expand # automatically imported in Snakemake 

expand("data/{{sample}}_{pair}.txt", pair="A B C".split())
# ['data/{sample}_A.txt', 'data/{sample}_B.txt', 'data/{sample}_C.txt']

【讨论】:

  • rule all: input: expand("concatenated/{sample}.txt", sample=samples)
  • 谢谢。我不知道{{}} 符号。这基本上有没有在直接环境中解析的功能(即这里的expand功能)?
  • 没问题;它是用于避免格式化的常规 Python:"{{hi}}_{hi}".format(hi="hei") 变为 "{hi}_hei"。
  • 我再次更新了我的问题。我对snakemake 如何使用通配符感到有些困惑。感谢您对第二个问题的帮助。
猜你喜欢
  • 2022-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-23
相关资源
最近更新 更多