4

.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.Tuple2[[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 データ型があります。ヘッダーを拾っていますか?キャストする必要がありますか?もしそうなら、それがタイププロバイダーの目的ではありませんか? 私は何が欠けていますか?前もって感謝します。

4

1 に答える 1

6

必要なオーバーR.data_frameロードは、キーと値のペアの辞書を取るものです。このディクショナリを自分で構築することもnamedParams、R 型プロバイダー ライブラリに含まれている関数を使用することもできます。

混乱を避けるため、ペアのリストの名前を に変更しましたdf。次に、次のようなフレームを作成できます。

let df = 
  [ "month", month
    "time", time2 ]

namedParams df
|> R.data_frame
|> R.plot

PS: CSV データへのより優れた型付きデータ アクセスを提供するCSV タイプ プロバイダーCsvFileを使用する代わりに、データを動的に読み取るために使用する理由はありますか?

于 2013-10-31T18:17:11.877 に答える