r - Scala:通过整数列表定义映射

标签 r scala functional-programming

从 R 转到 Scala(完全新手)。

假设我有两个列表:

val index  = List(0,0,1,0,1)
val a      = List(1,2,3,4,5)

那么index可以定义一个从ab的自然映射:List[List[Int]]:

1 -> b(0)
2 -> b(0)
3 -> b(1)
4 -> b(0)
5 -> b(1)

这样:

b = List(List(1,2,4), List(3,5))

一般来说,给定 indexa,在 Scala 中创建 b 的最自然方法是什么?

例如例如,在 R 中我可以这样写:

run_map <- function(index, a) {
  map <- function(data, i) {
    data[[i]] <- a[which(index == i)]
    data
  }
  Reduce(map, unique(index), list())
}

欢迎任何帮助!

最佳答案

如果您希望一个列表包含索引而另一个列表包含值,那么您可以将它们zip 在一起:

val myMap = (a zip b).toMap

其中 a 包含索引,b 包含值。

但是,如果存在重复索引,那么您需要执行以下操作:

for{
  (i, list) <- (a zip b) groupBy (_._1)
} yield (i, list map (_._2))

其中您正在压缩、按索引分组,然后映射列表中的值。该创建的列表包含作为元组的索引和值。

关于r - Scala:通过整数列表定义映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20869764/

相关文章:

scala - IntelliJ 14 中的 `Cannot find symbol`

functional-programming - lisp 中的析取分布属性

R Shiny 发布错误: inferAppPrimaryDoc Execution halted

rmarkdown : plot dissapears when grid. 栅格位于 `if` block 内

r - gt 表中的字体在 R Shiny 应用程序中不起作用

java - 如果实际参数是 lambda,则在重载方法之间进行选择

javascript - 以功能方式解析结构化数据(例如,不改变)

r - 在 R 中按 NA 聚合

scala - 这个案例类匹配模式是如何工作的?

java - JUNG 中的顶点/节点显示在窗口之外