我通过.csv类型提供程序从.csv获取一些数据并将其放入R要使用的数据框中。
这是导入:
#r @"..\packages\R.NET.1.5.5\lib\net40\RDotNet.dll"
#r @"..\packages\RDotNet.FSharp.0.1.2.1\lib\net40\RDotNet.FSharp.dll"
#r @"..\packages\RProvider.1.0.3\lib\RProvider.dll"
#r @"..\packages\FSharp.Data.1.1.10\lib\net40\FSharp.Data.dll"
open System
open RDotNet
open RProvider
open RProvider.``base``
open RProvider.graphics
open FSharp.Data.Csv
open System.IO
let data = CsvFile.Load(@"C:\TEST.csv")
let date = data.Data |> Seq.map(fun r -> r.Columns.[3])
let time = data.Data |> Seq.map(fun r -> r.Columns.[10])
let disposition = data.Data |> Seq.map(fun r -> r.Columns.[11]);
let month = data.Data |> Seq.map(fun r -> r.Columns.[4])
let time2 = data.Data |> Seq.map(fun r -> r.Columns.[7])
当我尝试创建数据框时,我得到以下异常 - 无论我尝试加载的数据类型如何:
System.Exception:没有为类型Microsoft.FSharp.Collections.FSharpList 1[[System.Tuple
注册转换器2 [[System.String,mscorlib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089] ,[System.Collections.Generic.IEnumerable`1 [[System.String,mscorlib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089]],mscorlib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089 ]],mscorlib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089]]或其任何基本类型
以下是DF负载的示例。
let namedParameters = [
"month",month;
"time",time2;]
namedParameters
|> R.data_frame
|> R.plot
问题是 - 有int数据类型。它是否拿起头?我需要演员吗?如果是这样,那不是类型提供者的用途吗?我错过了什么?提前谢谢。
答案 0 :(得分:6)
您需要的R.data_frame
重载是一个获取键值对字典的重载。您可以自己构建此字典,也可以使用R类型提供程序库中包含的namedParams
函数。
为避免混淆,我将您的配对列表重命名为df
。然后你可以创建一个这样的框架:
let df =
[ "month", month
"time", time2 ]
namedParams df
|> R.data_frame
|> R.plot
PS:你有没有理由使用CsvFile
动态读取数据,而不是使用CSV type provider,它应该(假设它适用于你的输入)给你更好的类型数据访问到CSV数据?