大規模な(3.9ミルobs)データをエクスポートする最も効率的な方法。テキストファイルへのフレーム?[重複]

StackOverflow https://stackoverflow.com//questions/9703068

  •  13-12-2019
  •  | 
  •  

質問

私はSPSSにエクスポートしたいrにかなり大きなdataframeを持っています。このファイルは、最初にRにインポートしようとすると何時間もの頭痛を引き起こしましたが、私は成功しました read.fwf() オプションの使用 comment.char="%" (ファイルに表示されない文字)と fill= TRUE(一部の行にすべての変数が欠けている固定幅のASCIIファイルで、エラーメッセージが発生しました)。

とにかく、私のデータフレームは現在、3,9ミル観測と48変数(すべての文字)で構成されています。私はそれを4x1mill obsセットに分割することで、かなり迅速にファイルに書き込むことができます df2 <- df[1:1000000,] 続いて write.table(df2) など。、しかし、コンピュータがロックアップし、戻ってくるためにハードリセットを必要とせずに、一つのスイープでファイル全体を書き

Rが何年もの間大規模なデータセットに適していないという逸話を聞いた後、私が実際にこの種の問題に遭遇したのはこれが初めてです。私は他のアプローチがあるかどうか疑問に思います(低レベルのファイルをディスクに直接「ダンプ」しますか?)または、このタイプの大きなファイルのエクスポートを効率的に処理できる私には知られていないパッケージがあるかどうか?

役に立ちましたか?

解決

推測では、あなたのマシンはRAMが不足しているので、Rはスワップファイルを使用する必要があり、それは物事を遅くします。あなたがコードに支払われているならば、より多くのRAMを買うことはおそらくあなたが新しいコードを書くより安いでしょう。

そうは言っても、いくつかの可能性があります。ファイルをデータベースにエクスポートし、そのデータベースの機能を使用してテキストファイルに書き込むことができます。JD Longの答え この質問 この方法でファイルを読み込む方法を説明します;プロセスを元に戻すのはそれほど難しくないはずです。代わりに bigmemoryff そのようなファイルを書くためにパッケージ(Davyが述べたように)を使うことができます。

他のヒント

1)ファイルがすべて文字列の場合は、次を使用して保存します write.table() あなたが最初にそれをaに変更した場合、はるかに速く matrix.

2)また、たとえば1000000行のチャンクで書きますが、常に同じファイルに書き、引数を使用します append = TRUE.

更新

Matt Dowleによる広範な作業の後、他の効率改善を並列化して追加しました, fread よりも15倍も高速になりました write.csv.詳細については、リンクされた回答を参照してください。


今すぐ data.table を持っている fwrite の約倍の速さと思われるオットーセイスカリが提供している機能 write.csv 一般的に。見る ここに いくつかのベンチマークのために。

library(data.table) 
fwrite(DF, "output.csv")

行名は除外されることに注意してください。 data.table タイプはそれらを使用しません。

私は非常に大きなファイル(10+Gb)を読むためにのみそれを使用しますが、私は信じています ff パッケージには、非常に大きなdfsを書き込むための機能があります。

まあ、本当に大きなファイルとRの答えはしばしばそうであるように、この種の作業をデータベースにオフロードするのが最善です。SPSSにはODBC接続があり、SPSSにはODBC接続があります。 RODBC RからSQLへのインターフェイスを提供します。

私は、私の情報をチェックアウトする過程で、私はすくわれていることに注意してください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top