【问题标题】:Snakemake: Random order of wildcards in wildcards listSnakemake:通配符列表中通配符的随机顺序
【发布时间】:2023-04-06 05:42:01
【问题描述】:

我在函数中索引我的蛇形通配符时遇到问题。由于某种原因,变量在“通配符”列表中的存储顺序会有所不同。我使用该函数为我的一个规则生成输入文件的路径,并且随着正确值的位置发生变化,该规则仅在每几个查询中成功一次。如何控制或固定通配符在“通配符”列表中的位置? 我添加了我的 Snakefile 的相关内容。

谢谢你, 祖上

#!/usr/bin/env python3
import glob
import re

R_BIN = "Rscript"

pop = "lineA lineB".split()
group = "test control".split()
chrom = "X Y".split()

def getInput(Wildcards):
    pop = str(Wildcards[0])
    group = str(Wildcards[1])
    chrom = str(Wildcards[2])
    path = "Resources/bed/" + pop + "_" + group + r"_rep[1-5]/" + pop + "_" + group + r"_rep[1-5]_chr" + chrom + ".bed"
    return(glob.glob(path))

rule BED2BS:
    input:
        getInput
    output:
        wd + "Resources/bs/{pop}_{group}/{group}_chr{chrom}.RDS"
    shell:
        R_BIN + " Scripts/Script1.R {input} {output}"

【问题讨论】:

  • 请给minimal reproducible example。我真的不知道你在说什么。
  • 非常抱歉。我说的是工作流管理器 Snakemake 的问题,我才意识到我真的没有说清楚(标签除外)。我添加了这些信息并扩展了代码。
  • 您还没有解释这个“通配符”列表的来源、它是什么以及您期望它是什么。任何人都可以从您的问题中了解到,列表实际包含的内容与您期望它包含的内容之间存在某种不匹配。只是猜测-您是从转换为列表的字典中创建的,并且由于字典没有明确定义的顺序这一事实而被抛出,因此当您将值或键转换为时得到的顺序列表本质上是随机的。
  • 通配符对象由Snakemake生成。对于熟悉 Snakemake 的人来说,整个问题是完全可以理解的。请注意,Snakemake 语言是 Python 的特定领域语法扩展。除此之外,您的猜测朝着正确的方向发展。在内部,通配符对象派生自字典。

标签: python wildcard snakemake


【解决方案1】:

Snakemake 不保留通配符顺序(请注意,不同的输出和输入文件可以以不同的顺序使用相同的通配符。因此,文件模式中通配符的出现没有规范的顺序)。但是,您可以按名称处理通配符值,例如:

wildcards.group

请考虑通过Snakemake tutorial

【讨论】:

  • 这个问题很有意义。
  • 谢谢,这行得通 :) 我会再看一遍教程,显然我错过了一些要点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-17
  • 2020-12-15
  • 2023-03-20
  • 1970-01-01
  • 2022-07-22
  • 2021-12-03
相关资源
最近更新 更多