1

这有效:

let df = Frame(["s1";"s2"],
         [ series["a"=>1;"b"=>2]; series["a"=>3;"b"=>4] ])

但如果我这样做:

let theSeries = [ series["a"=>1;"b"=>2]; series["a"=>3;"b"=>4] ]
let df2 = Frame(["s1";"s2"], theSeries)

我得到错误:

error FS0001: The type 'Series<string,int> list' is not compatible with the type 'seq<ISeries<'a>>'

这样做的正确方法是什么?

4

1 回答 1

1

这有点微妙。当您将列表直接传递给构造函数时,F# 会根据构造函数所需的类型推断列表的类型,即list<ISeries<_>>.

相反,当您首先创建列表时,类型是从特定系列中推断出来的,您会得到list<Series<int, float>>.

您可以通过添加类型注释来解决此问题:

let theSeries : list<ISeries<_>> = [ series["a"=>1;"b"=>2]; series["a"=>3;"b"=>4] ]
let df2 = Frame(["s1";"s2"], theSeries)

或者您可以使用(也许更好)ofColumns功能:

[ "s1" => series["a"=>1;"b"=>2]
  "s2" => series["a"=>3;"b"=>4] ]
|> Frame.ofColumns
于 2015-04-25T01:01:47.933 回答