Nextflow 快速搭建生信分析流程(六)- Transforming operators

本节我们介绍Nextflow中Transforming operators类型。Transforming operators-转换操作符转换操作符包括buffer, collate, collect, flatten, flatMap, groupTuple, map, reduce, toList, toSortedList, transpose;1. mapmap操作符采用闭包的形式对元素进行转换,并将转换之后的元素存储到新的channel中;Channel.from( 1, 2, 3, 4, 5 ).map { it * it }.subscribe onNext: { println it }, onComplete: { println 'Done' }2. flatMapflatMap操作符用于将channel中的列表元素按照单个元素的形式释放出来;// create a channel of numbersnumbers = Channel.from( 1, 2, 3 )// map each number to a tuple (array), which items are emitted separatelyresults = numbers.flatMap { n -> [ n*2, n*3 ] }// print the final resultsresults.subscribe onNext: { println it }, onComplete: { println 'Done' }3. reducereduce操作符每次会输入两个参数,它会将之前函数的结果作为输入与当前的元素进行计算,最后返回直到所有元素都遍历完成之后的结果。Channel.from( 1, 2, 3, 4, 5 ).reduce { a, b -> println "a: $a b: $b"; return a+b }.view { "result = $it" }4. groupTuplegroupTuple操作符用于将channel中的列表按照指定的键进行分组,最终返回一个分组后的列表(列表中每个元素含有不同的键);Channel.from( [1,'A'], [1,'B'], [2,'C'], [3, 'B'], [1,'C'], [2, 'A'], [3, 'D'] ).groupTuple().view()返回结果为:[1, [A, B, C]][2, [C, A]][3, [B, D]]groupTuple中可选参数如下:参数参数描述by指定分组的键,索引从0开始,可以指定多个索引,如:by:[0,1]sort指定分组后的元素排序方法size分组后的列表中含有的元素个数,当达到指定数目时,列表就会释放remainder当设置为false时,没有分组的元素将会丢弃,只有指定size时才起作用sort中的选项描述:Sort参数描述false默认不进行排序true按照默认的排序方式进行排序hash按照hash值进行排序deep与hash排序类似,不同的是,当元素中含有文件时,会按照文件内容创建hashcustom自定义排序方法,可以使用闭包或比较函数5. bufferbuffer操作符用于将原始channel中的元素按照指定的条件分割成不同的subsets;Channel.from( 1,2,3,4,5,1,2,3,4,5,1,2 ).buffer( 2, 4 ).view()// emits bundles starting with '2' and ending with'4'[2,3,4][2,3,4]6. collatecollate操作符用于将channel中的元素每n个组成一个列表;Channel.from(1,2,3,1,2,3,1).collate( 3 ).view()// results[1, 2, 3][1, 2, 3][1]7. collectcollect操作符将channel中所有的元素收集在一起,并将所有结果作为一个对象返回;Channel.from( 1, 2, 3, 4 ).collect().view()# outputs[1,2,3,4]8. flattenflatten操作符用于将channel中的所有列表元素拆分成单个的元素;Channel.from( [1,[2,3]], 4, [5,[6]] ).flatten().view()#output1234569. toListtoList操作符用于将channel中所有的元素转换成一个列表,并将这个列表作为单独的一个元素释放;Channel.from( 1, 2, 3, 4 ).toList().subscribe onNext: { println it }, onComplete: 'Done'#output[1,2,3,4]Done10. toSortedListtoSortedList操作符将channel中所有的元素收集在一起并将元素排序之后按照单一的一个元素输出;Channel.from( 3, 2, 1, 4 ).toSortedList().subscribe onNext: { println it }, onComplete: 'Done'#output[1,2,3,4]Done11. transposetranspose操作符用于将channel中的元素进行转置;Channel.from([['a', ['p', 'q'], ['u','v'] ],['b', ['s', 't'], ['x','y'] ]]).transpose().view()#output[a, p, u][a, q, v][b, s, x][b, t, y]transpose中可选参数如下:参数描述by按照指定的index转置,可以是多个index, 如:by:[0,2]remainder当设置为false时,不完整的元素将会丢弃,默认为false

(0)

相关推荐