这有效:
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>>'
这样做的正确方法是什么?
答案 0 :(得分: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