F#,Deddle和R.Net:seq<';a>;[]与IEnumerable数组

F#,Deddle和R.Net:seq<';a>;[]与IEnumerable数组,.net,functional-programming,f#,deedle,r.net,.net,Functional Programming,F#,Deedle,R.net,我正在尝试使用R.Net将Deedle帧转换为R数据帧 我尝试了3种不同的方法: open RDotNet REngine.SetEnvironmentVariables(@"C:\Program Files\R\R-3.6.3\bin\x64",@"C:\Program Files\R\R-3.6.3") let engine = REngine.GetInstance() //Deedle with columns x and y and with all the values as

我正在尝试使用R.Net将Deedle帧转换为R数据帧

我尝试了3种不同的方法:

open RDotNet

REngine.SetEnvironmentVariables(@"C:\Program Files\R\R-3.6.3\bin\x64",@"C:\Program Files\R\R-3.6.3")

let engine = REngine.GetInstance()

//Deedle with columns x and y and with all the values as floats
let d = Frame.ReadCsv(@"C:\Users\flavi\Downloads\test.txt")

let a1 =
    ([],d.ColumnKeys)
    ||> Seq.fold (fun acc elem -> (d |> Frame.getCol elem |> Series.values |> Seq.map float)::acc) |> List.toArray

let a2 =
    [|
        d |> Frame.getCol "x" |> Series.values |> Seq.map float
        d |> Frame.getCol "y" |> Series.values |> Seq.map float
    |]

let (a3 : IEnumerable array) =
    [|
        d |> Frame.getCol "x" |> Series.values |> Seq.map float
        d |> Frame.getCol "y" |> Series.values |> Seq.map float
    |]

//only works with a3
let rFrame = engine.CreateDataFrame(a3,d.ColumnKeys |> Seq.map string |> Seq.toArray)
a1(我想使用的那个)和a2具有相同的签名:seq[]。 a3与a2相同,唯一的区别是IEnumerable数组的“强制”签名。 只有a3可以工作,但a3的创建方式并不好,因为我必须手动插入所有列

我的问题是:1)为什么只有a3有效?;2) 我怎样才能像a1一样重新创建a3,也就是说,不必事先知道存在的所有列,并将IEnumerable数组作为签名?

CreateDataFrame()需要一个
IEnumerable
数组,但a1是一个
seq
数组,这是F#的说法
IEnumerable
;你只需要再投一次。这为我编译(尽管我还没有实际运行它):

a1=
d、 柱键
|>顺序折叠
(趣味acc键->
让价值观=
D
|>Frame.getCol键
|>系列值
|>Seq.map unbox
值::acc)
[]
|>Seq.map(乐趣浮动->浮动:>IEnumerable)
|>序号:toArray
谢谢!“|>Seq.map(乐趣浮动->浮动:>IEnumerable)”解决了我的问题!
let a1 =
    d.ColumnKeys
    |> Seq.fold 
        (fun acc key -> 
            let values =
                d 
                |> Frame.getCol key
                |> Series.values 
                |> Seq.map unbox<float>
            values::acc)
        []
    |> Seq.map (fun floats -> floats :> IEnumerable)
    |> Seq.toArray