重述我的问题:
我正在编写一个实现数据挖掘算法的程序。在这个程序中,我想保存应该有意思的输入数据。想象一下,输入数据是一个包含行和列的表。每一行都将由我的Scala类(有问题的一个)的实例表示。输入数据的列可以是不同类型(整数,双精度,字符串,等等),哪种类型将根据输入数据而变化。我需要一种在Scala类实例中存储行的方法。因此,我需要一个有序的集合(如特殊的List),它可以将(许多)不同的类型保存为元素,并且必须可能只在运行时确定类型。我怎样才能做到这一点? Vector或List要求所有元素都应该是相同的类型。一个元组可以包含不同的类型(如果我没有记错的话,可以在运行时确定),但只有22个元素太少。
奖金(不确定我现在是否要求太多):
我的问题的陈述:
我希望像Scala中的R一样知道data.frame,但我只需要一行。该行将成为类中的成员。这种结构的原因是我希望与每一行相关的方法都接近数据本身。每个数据行也应该具有关于自身的元数据,并且可以给出函数以便不同地操纵不同的行。但是我需要在类中以某种方式保存行。列表或向量会浮现在脑海中,但它们只允许所有整数,字符串等 - 但正如我们从data.frame所知,不同的列(此处为Vector或List中的元素)可以是不同的类型。我还想保存每列的名称,以便能够按列名访问行值。这似乎是最小的问题。我希望很清楚我的意思。我该如何实现呢?
答案 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鸿沟联系起来。