初识Nextflow (系列之一)

写在前面

每个人的时间都是有限的。
昨夜反思,当我发现博士生活已经过了一年半,而我也需要耗费一定量的时间在实验上的时候,我开始有顾虑。我认知中的

成长是需要时间的,浮沙筑高楼是不可能持久的。

这类观点,与现实格格不入。
我也突然发现,我所认为的打好基础的生信学习方式,只适合我自己。
所以我选择放弃一些想做的事情,切换模式开展。希望这会是一个能够在短时间内极大提升整体工作效率的方式。

我开始发现,很多不错的东西,我会推荐给少数的师弟师妹,而其中有极少数在最后用起来,也用的很好,包括python,docker和Nextflow。但是事实上,我都是在推荐给他们后一两年才开始真正地使用这些工具。主要原因是,我认为这些必然是好东西,他们必火,但是我没有时间也不想改变

不愿意改变的,自然是会被淘汰的。正如我现在的窘境。你不应该其期望有人能够跟你一样,有充足的时间,精力和机遇,冲进去,杀出来。所以,你应该造一门大炮,然后来者,只需要点火就可以完成你所不能完成事情。

回到主题

NextFlow,知道的人知道,不知道的人或许以后会知道。我终于还是要用起来。毕竟从流程搭建上,我个人的直观感受比make,snakmake都会更优秀。

NextFlow 调试 与 使用

环境需要

Linux Mac等,如果是windows,那么可能推荐从虚拟机

软件配置

  1. 确保java1.7 及以上的版本
    java -version
  2. 下载
curl -s https://get.nextflow.io | bash 

下载完成之后,会在当前目录生成一个nextflow可执行文件,文件可移动到 环境变量可访问的目录。事实上,这是一个明显的过程,下载一个bash文件,并执行他

  1. 运行示例
./nextflow run hello

对docker有所了解的朋友,应是马上get到。即下载并运行他。

实践操作

从本地创建的流程并运行
vim tutorial.nf

文件中输入以下内容

#!/usr/bin/env nextflow

params.str = 'Hello world!'

process splitLetters {

    output:
    file 'chunk_*' into letters mode flatten

    """
    printf '${params.str}' | split -b 6 - chunk_
    """
}


process convertToUpper {

    input:
    file x from letters

    output:
    stdout result

    """
    cat $x | tr '[a-z]' '[A-Z]'
    """
}

result.subscribe {
    println it.trim()
}

运行

nextflow run tutorial.nf

定义了两个步骤,一个步骤串一个步骤,其中splitLetters运行了一次,将字符串分隔并输出到两个文件,而convertToUpper运行了两次,而且还是并行运行的
注意,在当前文件夹下会产生work文件夹,这个文件夹,记录了已经运行完成的步骤。当.nf脚本某个部分发生改变,而这个改变不影响该步骤时,该步骤会直接使用之前的结果(可能极大地提升时间)。

修改流程并查看使用缓存的已运行步骤

修改.nf文件中的convertToUpper的处理函数为rev $x,即

process convertToUpper {

    input:
    file x from letters

    output:
    stdout result

    """
    rev $x
    """
}

重新运行时,如果加上-resume参数,那么就可以使用缓存

nextflow run tutorial.nf -resume

当然,如果没加-resume,那么就会不使用缓存

使用命令行参数

上述.nf脚本中的params.str 事实上是设置默认参数。这个参数可以通过命令行直接给予,如

nextflow run tutorial.nf --str 'Hola mundo'
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,323评论 19 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,132评论 25 709
  • 用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金 Cover 有什么料? 从这篇文章中你...
    hw1212阅读 14,467评论 2 59
  • 1. JSONFieldFilter 2. FastJsonUtil 3. FastJsonValueFilter...
    zxk175阅读 14,278评论 0 4
  • 早上阳光明媚,在家读书习字,正感内心充实平和。 突然楼底下音响传来阵阵放肆的歌声,几个中老年卖力地演唱,仿佛害怕世...
    LisaLi_512阅读 3,848评论 3 3