列表中有多种类型?

时间:2016-09-16 15:59:57

标签: scala

重述我的问题:

我正在编写一个实现数据挖掘算法的程序。在这个程序中,我想保存应该有意思的输入数据。想象一下,输入数据是一个包含行和列的表。每一行都将由我的Scala类(有问题的一个)的实例表示。输入数据的列可以是不同类型(整数,双精度,字符串,等等),哪种类型将根据输入数据而变化。我需要一种在Scala类实例中存储行的方法。因此,我需要一个有序的集合(如特殊的List),它可以将(许多)不同的类型保存为元素,并且必须可能只在运行时确定类型。我怎样才能做到这一点? Vector或List要求所有元素都应该是相同的类型。一个元组可以包含不同的类型(如果我没有记错的话,可以在运行时确定),但只有22个元素太少。

奖金(不确定我现在是否要求太多):

  • 我还希望按名称命名行的列。但是,我认为通过使用两个列表可以很容易地解决这个问题。 (Altough,我刚刚在某个地方读到了这个问题 - 但我忘了哪里 - 并且认为这个问题得到了更优雅的解决。)
  • 让我的收藏品随机访问(所以“Vector”而不是“List”)可能会很好。
  • 具有线性代数(矩阵乘法等)功能会很好。
  • 更多奖励:如果我能保存矩阵。

我的问题的陈述:

我希望像Scala中的R一样知道data.frame,但我只需要一行。该行将成为类中的成员。这种结构的原因是我希望与每一行相关的方法都接近数据本身。每个数据行也应该具有关于自身的元数据,并且可以给出函数以便不同地操纵不同的行。但是我需要在类中以某种方式保存行。列表或向量会浮现在脑海中,但它们只允许所有整数,字符串等 - 但正如我们从data.frame所知,不同的列(此处为Vector或List中的元素)可以是不同的类型。我还想保存每列的名称,以便能够按列名访问行值。这似乎是最小的问题。我希望很清楚我的意思。我该如何实现呢?

1 个答案:

答案 0 :(得分:0)

R中的DataFrame是同源列向量的异构列表:

> df <- data.frame(c1=c(r1=1,r2=2), c2=c('a', 'b')); df
   c1 c2
r1  1  a
r2  2  b

可以将每一行视为标量值的异构列表:

> as.list(df['r1',])
$c1
[1] 1

$c2
[1] a

scala中的类似实现将是列表元组:

scala> val df = (List(1, 2), List('a', 'b'))
df: (List[Int], List[Char]) = (List(1, 2),List(a, b))

然后每行可以只是一个元组:

scala> val r1 = (1, 'a')
r1: (Int, Char) = (1,a)

如果要为所有变量命名,另一种可能性是案例类:

scala> case class Row (col1:Int, col2:Char)
defined class Row

scala> val r1 = Row(col1=1, col2='a')
r1: Row = Row(1,a)

希望有助于将R与scala鸿沟联系起来。