gpt4 book ai didi

.net - F#、Deddle 和 R.Net : seq<'a> [] vs. IEnumerable 数组

转载 作者:行者123 更新时间:2023-12-02 03:06:56 24 4
gpt4 key购买 nike

我正在尝试使用 R.Net 将 Deedle Frame 转换为 R DataFrame。

我尝试了 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 < float > []。a3 与 a2 相同,唯一的区别是 IEnumerable 数组的“强制”签名。只有 a3 有效,但创建 a3 的方式不好,因为我必须手动插入所有列。

我的问题是:1)为什么只有a3有效? 2)如何像a1一样重新创建a3,即不必事先知道所有存在的列并以 IEnumerable 数组作为签名?

最佳答案

CreateDataFrame() 需要一个 IEnumerable 的数组,但 a1 是 seq<float> 的数组,这是 F# 的表达方式 IEnumerable<float> ;你只需要另一个 Actor 在那里。这为我编译(尽管我没有实际运行它):

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

关于.net - F#、Deddle 和 R.Net : seq<'a> [] vs. IEnumerable 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60739662/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com