Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
F# 从CsvFile.Load(或从csv创建数组字典)中以数组形式按名称获取列_F#_F# Data - Fatal编程技术网

F# 从CsvFile.Load(或从csv创建数组字典)中以数组形式按名称获取列

F# 从CsvFile.Load(或从csv创建数组字典)中以数组形式按名称获取列,f#,f#-data,F#,F# Data,我有以下代码来加载csv。从“msft”(最好是通过名称)获取列作为数组的最佳方式是什么?或者我应该以不同的方式加载数据来实现这一点 #r "FSharp.Data.dll" open FSharp.Data.Csv let msft = CsvFile.Load("http://ichart.finance.yahoo.com/table.csv?s=MSFT").Cache() 编辑:或者,将csv导入由列名键入的数组字典的有效方法是什么?如果我真的要为此提出一个新问题,请让我知道。还不

我有以下代码来加载csv。从“msft”(最好是通过名称)获取列作为数组的最佳方式是什么?或者我应该以不同的方式加载数据来实现这一点

#r "FSharp.Data.dll"
open FSharp.Data.Csv

let msft = CsvFile.Load("http://ichart.finance.yahoo.com/table.csv?s=MSFT").Cache()
编辑:或者,将csv导入由列名键入的数组字典的有效方法是什么?如果我真的要为此提出一个新问题,请让我知道。还不熟悉所有stackoverflow标准。

我也经历过。像下面这样的东西应该可以做到这一点

let data = 
    msft.Data
    |> List.fold (fun acc row -> row.Date :: acc) List.Empty<DateTime>
let数据=
msft.数据
|>List.fold(fun acc row->row.Date::acc)List.Empty

在这里,我将msft数据记录的msft.Data列表进行管道化处理,并将其向下折叠为该列表中一个项目的列表。请检查文档中提到的所有功能。我没有运行这个

当您说要“按名称”列时,不清楚您的意思是“有人将列名作为字符串传递给我”还是“我在代码中使用列名”。类型提供程序非常适合后一种情况,但对前者没有帮助

对于后一种情况,您可以使用以下方法:

let closes = [| yield! msft.Data |> Seq.map (fun x -> x.Close) |]

如果是前者,您可能需要考虑以其他方式读取数据,也许考虑到以列名称键入的字典。


类型提供程序的全部要点是使所有这些强类型化和代码集中化,并避免将列名作为字符串传递,而这些字符串可能是有效的,也可能是无效的。

基于Latkin的答案,这似乎是一种更具功能性的或F#方式

let getVector columnAccessor msft = 
    [| yield! msft.Data |> Seq.map columnAccessor |]

(* Now we can get the column all at once *)
let closes = getVector (fun x -> x.Close) msft

(* Or we can create an accessor and pipe our data to it. *) 
let getCloses = getVector (fun x -> x.Close)    
let closes = msft |> getCloses

我希望这会有所帮助

对不起,不清楚。我真正想要的是一个由列名键入的数组字典。我曾想过这样做,但我不确定这是否是一种表示数据的“正确”方式,但您提到的事实让我更加确信这一点。我仍然不确定如何有效地将数据从csv(或sql)导入数组字典。有什么建议吗?你必须先创建一个包含
大小数组的字典(又名
S.C.G.List
),因为你将在创建字典的过程中创建它。读取/解析文件的第一行以填充键,然后拆分文件的每一行,将数据添加到每个适当键下的
ResizeArray
。可能已经有一个图书馆可以做这样的事情了。