मैं R.Net का उपयोग करके एक डीडल फ़्रेम को 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 बनाया गया था वह अच्छा नहीं है, क्योंकि मुझे सभी कॉलम हाथ से डालने हैं।

मेरे प्रश्न हैं: १) केवल a3 ही क्यों काम करता है ?; 2) मैं a3 को a1 की तरह फिर से कैसे बना सकता हूं, यानी, पहले से मौजूद सभी स्तंभों को नहीं जानना और हस्ताक्षर के रूप में IEnumerable सरणी रखना

3
FRocha 18 मार्च 2020, 15:32

1 उत्तर

सबसे बढ़िया उत्तर

CreateDataFrame() IEnumerable की एक सरणी चाहता है, लेकिन a1 seq<float> की एक सरणी है, जो कि IEnumerable<float> कहने का F# तरीका है; आपको बस वहां एक और कास्ट की जरूरत है। यह मेरे लिए संकलित करता है (हालांकि मैंने वास्तव में इसे नहीं चलाया है):

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
4
Jim Foye 18 मार्च 2020, 15:56