首页 > 解决方案 > Nextflow“扁平化”类似于 dplyr 中的“unnest”

问题描述

Nextflow,暂时不使用 DSL2。


data =  [
    [1, 'a', ['a1', 'a2']],
    [2, 'b', ['b1', 'b2', 'b3']],
    [3, 'c', ['c1']]
]

ch = Channel.from(data)

有什么办法可以从这个通道到一个总共有 6 行的通道,内容

[
    [1, 'a', 'a1'],
    [1, 'a', 'a2'],
    [2, 'b', 'b1'],
    [2, 'b', 'b2'],
    [2, 'b', 'b3'],
    [3, 'c', 'c1']
]

基本上,取消嵌套通道中每个元组的第三项。我想它可以通过首先重复嵌套列表的长度的非嵌套项目然后展平结果来工作,但我不知道我会怎么做。

标签: unnestnextflow

解决方案


您可以为此使用转置运算符:

data =  [
    [1, 'a', ['a1', 'a2']],
    [2, 'b', ['b1', 'b2', 'b3']],
    [3, 'c', ['c1']]
]

Channel.from(data).transpose().view()

结果:

[1, a, a1]
[1, a, a2]
[2, b, b1]
[2, b, b2]
[2, b, b3]
[3, c, c1]

推荐阅读