Snakemake 输出中的 lambda 函数

2024-04-09

我目前有一个snakemake工作流程,需要使用lambda通配符,设置如下:

蛇文件:

configfile: "config.yaml"
workdir: config["work"]

rule all:
    input:
        expand("logs/bwa/{ref}.log", ref=config["refs"])

rule bwa_index:
    input:
        lambda wildcards: 'data/'+config["refs"][wildcards.ref]+".fna.gz"
    output:
        "logs/bwa/{ref}.log"
    log:
        "logs/bwa/{ref}.log"
    shell:
        "bwa index {input} 2&>1 {log}"

配置文件:

work: /datasets/work/AF_CROWN_RUST_WORK/2020-02-28_GWAS

refs:
    12NC29: GCA_002873275.1_ASM287327v1_genomic
    12SD80: GCA_002873125.1_ASM287312v1_genomic

这可行,但我不得不使用 hack 来获取输出bwa_index玩的输入all。我的技巧是生成一个日志文件作为bwa_index,将日志设置为输出bwa_index,然后设置输入all到这些日志文件。正如我所说,它有效,但我不喜欢它。 问题是真实的输出bwa_index格式为,例如,GCA_002873275.1_ASM287327v1_genomic.fna.sa。因此,要指定这些输出文件,我需要使用 lambda 函数作为输出,如下所示:

rule bwa_index:
    input:
        lambda wildcards: 'data/'+config["refs"][wildcards.ref]+".fna.gz"
    output:
        lambda wildcards: 'data/'+config["refs"][wildcards.ref]+".fna.sa"
    log:
        "logs/bwa/{ref}.log"
    shell:
        "bwa index {input} 2&>1 {log}"

然后使用带有 Expand 的 lambda 函数作为输入rule all。然而,snakemake 不会接受函数作为输出,所以我完全不知道如何做到这一点(除了我的 hack)。有人有合理解决方案的建议吗?蒂亚!


您可以在输入中使用一个简单的 python 函数(作为 lambda 函数),所以我建议您将它用于规则all.

configfile: "config.yaml"
workdir: config["work"]

def getTargetFiles():
    targets = list()
    for r in config["refs"]:
        targets.append("data/"+config["refs"][r]+".fna.sa")

    return targets

rule all:
    input:
        getTargetFiles()

rule bwa_index:
    input:
        "data/{ref}.fna.gz"
    output:
        "data/{ref}.fna.sa"
    log:
        "logs/bwa/{ref}.log"
    shell:
        "bwa index {input} 2&>1 {log}"

小心这里的通配符{ref}是字典的值而不是键,因此您的日志文件最终将被命名为“logs/bwa/GCA_002873275.1_ASM287327v1_genomic.log”,等等...

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Snakemake 输出中的 lambda 函数 的相关文章

随机推荐

  • document.head v. document.getElementsByTagName("head")[0]

    使用有什么区别document head并使用document getElementsByTagName head 0 我运行的测试表明它们都需要大约一毫秒 我也见过 document head document getElementsBy
  • 如何在结构字段上创建可变迭代器

    所以我正在使用 Rust 开发一个小型 NES 模拟器 并且我正在尝试使用我的状态寄存器 寄存器是一个结构体 其中包含一些包含布尔值的字段 标志 寄存器本身是 CPU 结构体的一部分 现在 我想循环这些字段并根据我执行的某些指令设置布尔值
  • 为什么 -std=c++98 标志有时不起作用?

    情况如下 我想创建一个简单的 C 程序 但它必须使用onlyC 98 函数 我在用Ubuntu 20 04 4 LTS 我在用c 作为编译器我使用以下标志进行编译 Wall Werror Wextra std c 98 pedantic e
  • JTabbedPane 自定义选项卡外观

    我想自定义 JTabbedPane 中选项卡的外观 我想从最简单 最朴素的行为开始 无边框 纯色 问题是仍然存在不平整的情况 选项卡的边距略有重叠 您会看到 由于选择了第二个选项卡 因此它被 带到了前台 这是通过轻微的边距重叠来实现的 有没
  • staruml 抽象类?

    有谁知道如何使用 StarUML 创建抽象类 我在文档中找不到任何提及 是否有某种反映抽象类的更一般的概念 从工具箱中选择类并将其添加到画布中 然后转到属性选择 isAbstract 复选框 然后类名显示为斜体
  • C++ timegm 将 DST 转换为未来某个给定时间的某个时区?

    我需要在我的班级中从 UTC 时间准确转换为给定时区的本地时间 无论 DST 是否有效 我的问题是 当我使用struct tm我必须提供 tm isdst 成员 或者将其保留为 1 以自动确定 from mktime 3 linux man
  • 关于Android应用程序更新的问题

    几个问题 升级应用程序对存储的数据 即首选项和数据库 有什么影响 系统是否执行新版本的全新安装 即删除旧版本然后安装新版本 或其他操作 如果用户想要保留存储的数据 例如共享首选项或 SQLite 数据库中的值 怎么办 如何模拟此应用程序更新
  • 在 Android Lollipop 5.0.1 的工作配置文件中安装未知来源的应用程序

    问题与 工作简介 相关安卓工作用 我编写了一个示例应用程序 它创建托管工作配置文件并将其自身设置为个人资料所有者 我需要通过配置文件所有者推送一些企业应用程序 因此 当我尝试安装时 它显示 安装被阻止 无法从未知来源安装 如果我切换按钮 设
  • 尝试使用 chrome.downloads (由于某种原因未定义)[重复]

    这个问题在这里已经有答案了 我正在尝试使用 Chrome 扩展从 URL 下载文件 图像 chrome 下载 https developer chrome com extensions downloads 但由于某种原因chrome dow
  • LINQ to Entities 无法识别该方法

    我在使用 Linq to Entities 时遇到问题 无法找到解决方法 这是我的代码 var queryResult result Where x gt x FollowedUp Value GetWeekFromDateTime Dat
  • 专门用于shared_ptr的集合

    是否存在一个集合 它知道shared ptr内部 并避免定期复制存储的shared ptr元素 而只复制其内部弱指针 这隐含地意味着 不会执行任何构造函数 析构函数调用 并且不会对shared ptrs的引用计数器进行操作 理论上 在采用C
  • 使用布尔系列/数组从 pandas 数据框中选择

    我有一个数据框 High Low Close Date 2009 02 11 30 20 29 41 29 87 2009 02 12 30 28 29 32 30 24 2009 02 13 30 45 29 96 30 10 2009
  • 避免在会话中存储不同 SQL 模式的连接字符串

    我计划在 Azure 中建立一个多租户应用程序 其中通过架构分离实现数据隔离 我计划使用子域来识别租户 想法是从子域获取租户名称 从登录页面获取用户 ID 和密码 并验证 uid 密码和租户 ID 以进行身份 验证 如果经过身份验证 则应用
  • 如何将 Typescript 模块转换为 JavaScript

    我有一个像这样的 src 工作目录 src functions final utils I have two文件 都在 final 内 我需要将其从打字稿转换为JavaScript才能在浏览器中运行 问题是 我的最终文件正在从其他 src
  • 如何修复 py2app 上的 distutils.errors.DistutilsError? [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我最近尝试使用 py2app 并且有一个名为 test py 的简单应用程序 一切都很好 直到我输入 python3 setup
  • 如何使用 Xamarin.Forms 显示警报框以进行验证?

    How to 使用 Xamarin Forms 显示警报框用于验证 我知道我们可以使用 ContentView 代码后面的以下代码显示警报 但我想显示我的 ViewModel 中的警报框 DisplayAlert Alert You hav
  • 失败安装解析失败清单格式错误

    我在安装应用程序时遇到一个奇怪的问题 当我编译我的项目时没有错误 但是当我尝试启动它时显示 安装错误 INSTALL PARSE FAILED MANIFEST MALFORMED Error 我已经尝试了很多与安装错误相关的事情 INST
  • Azure 数据工厂 V2 中的分页规则值(适用于 Rest API)

    我正在尝试填写Value分页规则内的框解释于本文 https sqlkover com azure data factory and the exact online rest api dealing with pagination 最近发
  • 使用 Ruby 控制 Tor 客户端

    我正在编写一个 Ruby 脚本 它会自动抓取网站进行数据分析 现在我有一个相当复杂的需求 我必须能够模拟来自多个国家 大约 20 个不同国家 的访问 该网站将根据 IP 位置包含不同的信息 因此完成该操作的唯一方法是从实际位于该国家 地区的
  • Snakemake 输出中的 lambda 函数

    我目前有一个snakemake工作流程 需要使用lambda通配符 设置如下 蛇文件 configfile config yaml workdir config work rule all input expand logs bwa ref