07-Nextflow operators(4)
2021-09-16 本文已影响0人
亦是旅人呐
Operators
Nextflow操作符是一些方法,允许您将信道相互连接,或转换应用用户提供的某些规则的信道发出的值。
操作符可分为七组:
- Filtering operators
- Transforming operators
- Splitting operators
- Combining operators
- Forking operators
- Maths operators
- Other operators
Note
操作符set和subscribe是最终操作符,因此,如果使用它们,它们必须是组合操作符链中的最后一个操作符。
Maths operators
本节讨论在信道上执行数学运算的操作符。
数学运算符是:
count
计数操作符创建一个发出单个项的信道:一个表示源信道发出的项总数的数字。例如:
Channel
.from(9,1,7,5)
.count()
.view()
// -> 4
可以提供一个可选参数来选择要计数的项目。选择条件可以指定为正则表达式、文字值、Java类或需要满足的布尔predicate。例如:
Channel
.from(4,1,7,1,1)
.count(1)
.view()
// -> 3
Channel
.from('a','c','c','q','b')
.count ( ~/c/ )
.view()
// -> 2
Channel
.from('a','c','c','q','b')
.count { it <= 'c' }
.view()
// -> 4
countBy
countBy操作符创建一个信道,该信道发出一个关联数组(即Map对象),该数组计数源信道中具有相同键的发出项的出现次数。例如:
Channel
.from( 'x', 'y', 'x', 'x', 'z', 'y' )
.countBy()
.view()
[x:3, y:2, z:1]
min
min操作符等待源信道完成,然后发出具有最低值的项。例如:
Channel
.from( 8, 6, 2, 5 )
.min()
.view { "Min value is $it" }
Min value is 2
可以指定一个可选的闭包参数,以便提供一个返回要比较的值的函数。下面的例子展示了如何找到最小长度的字符串项:
Channel
.from("hello","hi","hey")
.min { it.size() }
.view()
"hi"
另外,也可以指定一个比较器函数,也就是一个闭包,它有两个参数,代表两个发出的要比较的项。例如:
Channel
.from("hello","hi","hey")
.min { a,b -> a.size() <=> b.size() }
.view()
max
max操作符等待源信道完成,然后发出具有最大值的项。例如:
Channel
.from( 8, 6, 2, 5 )
.min()
.view { "Max value is $it" }
Max value is 8
可以指定一个可选的闭包参数,以便提供一个返回要比较的值的函数。下面的例子展示了如何找到最大长度的字符串项:
Channel
.from("hello","hi","hey")
.max { it.size() }
.view()
"hello"
另外,也可以指定一个比较器函数,也就是一个闭包,它有两个参数,代表两个发出的要比较的项。例如:
Channel
.from("hello","hi","hey")
.max { a,b -> a.size() <=> b.size() }
.view()
sum
sum操作符创建一个通道,该通道发出由该通道本身发出的所有项的和。例如:
Channel
.from( 8, 6, 2, 5 )
.sum()
.view { "The sum is $it" }
The sum is 21
可以指定一个可选的闭包参数,以便提供一个函数,对于给定的项,该函数返回要求和的值。例如:
Channel
.from( 4, 1, 7, 5 )
.sum { it * it }
.view { "Square: $it" }
Square: 91
toInteger
toInteger操作符允许您将通道发出的字符串值转换为Integer值。例如:
Channel
.from( '1', '7', '12' )
.toInteger()
.sum()
.view()