如何使用nextflow从列表创建字典来映射groupkey

问题描述 投票:0回答:1

我在 nextflow 中有一个列表

chr_frequency.toList().view()

[[chr1, 70], [chr2, 50], [chr3, 45]] 

和 wnat 转换成地图,如:

[ "chr1": 70, "chr2": 50, "chr2": 45 ] 

我需要这种格式来映射

groupKey

test.out.map { chr, bcf -> tuple( groupKey(chr, chr_frequency[chr]), bcf.flatten() ) }.groupTuple( by: 0 ).view()

我已经尝试过:

chr_frequency
    .flatten()
    .view()
chr21
3
chr22
3
    .toSpreadMap()

"Missing process or function toSpreadMap()"

尝试2

chr_frequency
    .collate(2).collectEntries().view()  

Missing process or function collectEntries()

使用 ubuntu 22.04 - openjdk 版本“11.0.22”2024-01-16

nextflow
1个回答
0
投票

如果

[[chr1, 70], [chr2, 50], [chr3, 45]]
是通过
chr_frequency.toList().view()
获得的,则
chr_frequency
是Nextflow通道。这不是一个列表,您不应该尝试将它当作一个列表来处理。

我创建了一个类似于您在下面描述的通道,并通过一些 Nextflow 脚本代码获得了我认为您正在寻找的内容。

Channel
  .of([['chr1', 70],
       ['chr2', 50],
       ['chr3', 45]
       ])
  .flatMap()
  .map { ["${it[0]}": it[1]] }
  .collect()
  .view()

您可以看到下面的输出:

如果您真的想要

[ "chr1": 70, "chr2": 50, "chr2": 45 ]
,您可以通过在
.view()
行上方添加以下行来实现:

...
  .map { it.collectEntries() }
  .view()

输出:

© www.soinside.com 2019 - 2024. All rights reserved.