2013-10-31 54 views
3

我從經由該.csv類型提供一個.csv服用一些數據,並把它在一個數據幀由R.FSharp R.data_frame

這裏可使用的是進口:

#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,版本= 4.0.0.0,文化=中性公鑰= b77a5c561934e089]],mscorlib程序,版本= 4.0.0.0,文化=中性公鑰= b77a5c561934e089]]或它的任何鹼類型的

這裏是的一個例子DF負載。

let namedParameters = [ 
    "month",month; 
    "time",time2;] 


namedParameters 
|> R.data_frame 
|> R.plot 

事情是 - 有int數據類型。它是否擡頭?我需要施放嗎?如果是這樣,是不是類型提供者是什麼?我錯過了什麼?提前致謝。

回答

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數據?