2011-08-07 15 views
6

bigmemoryパッケージのscan()とread.big.matrix()を組み合わせて200 MBの.csvファイルを読み込む方法はありますか混合型の列を持つファイルで、整数、文字、数値の列を持つデータフレームが得られるでしょうか?bigmemoryパッケージを使用して混合型カラムを使用して大きなcsvファイルをロードする方法

+1

bigememoryパッケージである必要がありますか?私はffがこの種のものにはるかに役立つことを発見しました – mdsumner

+0

@mdsumnerは正しい軌道にあります。ファイルをバックアップする必要がありますか? 200MBの場合は、読み込んで作業してから、1つ以上のBMファイルとして保存してください(または望むなら 'ff')。 – Iterator

答えて

3

ヘルプファイルによると、

ファイルには、1つのアトミックタイプ(すべての整数など)が含まれている必要があります。 ユーザーは、ファイルに行および/または列の名前があるかどうかを知る必要があります。 で目的の動作を取得するには、さまざまなオプションの組み合わせが役立ちます。

私はこのパッケージ/関数に慣れていませんが、Rでは、行列は原子タイプを1つしか持てません(data.framesとは異なります)。

+0

あなたの2セントをありがとう。このブログでは、http://joshpaulson.wordpress.com/2010/12/20/michael-kane-on-bigmemory/誰かが、1つのアトミックタイプしか持たないマトリックスの制限についての回避策を提案しました。行列)は、scan()を使用することです。私は、誰かがbigmemoryパッケージからread.big.matrixを使って自分の経験を共有できることを望んでいました。特に、混合型の列の読み込みやscan()の使用の有無に関することでした。 – Lourdes

+0

おそらく処理段階でそれを行うことができますが、間違っていることを証明したいと思います(sensu @Iterator)。 –

9

このためにffパッケージをお試しください。

library(ff) 
help(read.table.ffdf) 

関数「read.table.ffdf」「read.tableを」「FFDF」 非常に多くのようなオブジェクト(および使用)に分かれフラットファイルを読み取ります。また、 は 'read.csv'のような便利なラッパーで動作し、Rの通常の ラッパーのための 独自の便利ラッパー(例: 'read.csv.ffdf')を提供します。

これは、このような単純な作業でなければなりません。

x <- read.csv.ffdf(file=csvfile) 

(はるかに大きいファイルの場合、それはおそらくあなたがあなたのマシンやOSに応じて、設定オプションのいくつかを調査することが必要になります)。

+0

ありがとうmdsummer。私はffパッケージを試しました。オブジェクトに保存したほぼ300 MBのデータセットを読み込むことができました。このオブジェクトを後でas.data.frameでデータフレームに強制しました。しかし、これは非常に多くのメモリを消費し、分析のために残されたことはほとんどなかった。しかしそれは良いスタートであり、助けになる示唆でした。 – Lourdes

+0

ポイント全体がロードされるのではなく、ffパッケージのメモリマップされた機能を使用します。 ffデータ構造から部分を抽出するツールがあります。 – mdsumner

6

ああ、この人生では不可能なことがいくつかあります。誤解されて不快な状況につながるものがあります。 @Romanは正しい:マトリックスは1つの原子タイプでなければならない。それはデータフレームではありません。

マトリックスは1つのタイプでなければならないので、bigmemoryをスヌーカーで試してみると、複数のタイプを処理すること自体が悪いことです。それはできますか?私はそこに行くつもりはない。どうして?それ以外のものは、データフレームではなく行列を取得しているとみなされるからです。それはより多くの疑問と悲しみにつながります。

ここで、各列の種類を識別し、それぞれが特定の種類の項目を含む異なるビッグメモリファイルのセットを生成することができます。例えば。 charBM =文字ビッグ行列、intBM =整数ビッグ行列など。そして、この中からデータフレームを生成するラッパーを開発することができます。それでも、私はそれを推奨しません:あなたができるならば、大きなデータフレームグリフィンを作り出そうとするよりも、異なるアイテムをそのまま扱うか、同質性を強要してください。

@mdsumnerは、ffを示唆しています。もう1つのストレージオプションはHDF5で、Rのncdf4からアクセスできます。残念ながら、他のパッケージはbigmemoryほど快適ではありません。

+0

Thanks Iterator。あなたは正しい、他のパッケージはbigmemoryほど楽しいものではない。 – Lourdes

0

最適な解決策は、ファイルを1行ずつ読み込んで解析することです。このようにして、読み取りプロセスはほぼ直線的な量のメモリを占有します。

+0

ようこそStackOverflow!しかし、これは質問に答えるものではありません。これは具体的にはビッグメモリパッケージ –

関連する問題