2

R を使用して 1909x139352 のデータセットを操作しようとしています。私のコンピューターには 2GB の RAM しかないため、従来の方法ではデータセットが大きすぎます (500MB)。ffということで、パッケージを利用することにしました。しかし、私はいくつかの問題を抱えています。関数read.table.ffdfはデータの最初のチャンクを読み取ることができません。次のエラーでクラッシュします。

txtdata <- read.table.ffdf(file="/directory/myfile.csv", 
                           FUN="read.table", 
                           header=FALSE, 
                           sep=",", 
                          colClasses=c("factor",rep("integer",139351)), 
                          first.rows=100, next.rows=100, 
                          VERBOSE=TRUE)

  read.table.ffdf 1..100 (100)  csv-read=77.253sec
  Error en  ff(initdata = initdata, length = length, levels = levels, ordered = ordered,  : 
   write error

何が起こっているのか誰にもわかりませんか?

4

3 に答える 3

2

このエラー メッセージは、開いているファイルが多すぎることを示しています。ff では、ffdf のすべての列がファイルです。開いているファイルの数には制限があり、その数に達しています。Any idea on how to debug this FF error? に関する私の返信を参照してください。.

したがって、あなたの場合、139352列があるため、単に read.table.ffdf を使用しても機能しません。ただし、ff にインポートすることは可能ですが、この問題を回避するには、RAM にデータを取得しているときに列を開くときに注意する必要があります。

于 2012-12-25T11:57:21.063 に答える
1

最近、3,000 列までのデータ フレームでこの問題が発生しました。これを回避する最も簡単な方法は、ユーザー アカウントで開くことができるファイルの最大数を調整することです。典型的なシステムは ~ 1024 に設定されており、これは非常に保守的な制限です。 サーバー上のリソースの枯渇を防ぐために設定されていることに注意してください。

Linux の場合:

以下をファイルに追加し/etc/security/limits.confます。

youruserid hard nofile 200000 # you may enter whatever number you wish here youruserid soft nofile 200000 # whatever you want the default to be for each shell or process you have running

OS X の場合:

ファイルに以下を追加または編集し/etc/sysctl.conます。 kern.maxfilesperproc=200000 kern.maxfiles=200000

ログアウトして再度ログインする必要がありますが、元の投稿者は ffdf を使用して 139352 列のデータ フレームを開くことができます。

この制限での慣らし運転について詳しくは、こちらに投稿しました。

于 2016-12-02T16:29:38.787 に答える
1

あなたのデータセットは実際にはそれほど大きくありません.それを使って何をしようとしているのかについて何か言ってくれたら助かるかもしれません. R で使用可能なメモリを増やす か、それが機能しない場合、data.table パッケージは非常に高速であり、:= 演算子を使用して data.tables を操作するときにメモリを占有しません。
read.table.ffdf に関しては、これをチェックしてください.. read.table.ffdf チュートリアルを注意深く読むと、gc() などのコマンドを使用してメモリ使用量を最適化するためのヒントと詳細が得られます。

于 2012-12-25T00:03:35.387 に答える