Я пытаюсь преобразовать Фрейм Дидла в R DataFrame, используя R. Net.
Я пробовал 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) как я могу воссоздать a3 как a1, т. Е. Не знать заранее все существующие столбцы и иметь массив IEnumerable в качестве сигнатуры?