4

重複の可能性:
R で非常に大きなテーブルをデータフレームとしてすばやく読み取る

やあ、

R で大規模なデータセットを読み取ろうとすると、コンソールに次のエラーが表示されました。

data<-read.csv("UserDailyStats.csv", sep=",", header=T, na.strings="-", stringsAsFactors=FALSE)
> data = data[complete.cases(data),]
> dataset<-data.frame(user_id=as.character(data[,1]),event_date= as.character(data[,2]),day_of_week=as.factor(data[,3]),distinct_events_a_count=as.numeric(as.character(data[,4])),total_events_a_count=as.numeric(as.character(data[,5])),events_a_duration=as.numeric(as.character(data[,6])),distinct_events_b_count=as.numeric(as.character(data[,7])),total_events_b=as.numeric(as.character(data[,8])),events_b_duration= as.numeric(as.character(data[,9])))
Error: cannot allocate vector of size 94.3 Mb
In addition: Warning messages:
1: In data.frame(user_msisdn = as.character(data[, 1]), calls_date = as.character(data[,  :
  NAs introduced by coercion
2: In data.frame(user_msisdn = as.character(data[, 1]), calls_date = as.character(data[,  :
  NAs introduced by coercion
3: In class(value) <- "data.frame" :
  Reached total allocation of 3583Mb: see help(memory.size)
4: In class(value) <- "data.frame" :
  Reached total allocation of 3583Mb: see help(memory.size)

大規模なデータセットを読み取る方法を知っている人はいますか? UserDailyStats.csv のサイズは約 2GB です。

4

3 に答える 3

13

もちろん:

  1. より大きなコンピューター、特により多くの RAM を入手する
  2. 64 ビット OS を実行します。使用できるようになった RAM の追加については、1) を参照してください。
  3. 必要な列のみを読み取る
  4. 読み取る行数を減らす
  5. 2 GB を再解析するのではなく、データをバイナリで読み取ります (これは非常に非効率的です)。

Rのサイトにもマニュアルがあります。

于 2010-10-19T12:21:39.390 に答える
1

read.csvを使用して、呼び出しでデータ型を指定してみてくださいcolClasses

data<-read.csv("UserDailyStats.csv", sep=",", header=T, na.strings="-", stringsAsFactors=FALSE, colClasses=c("character","character","factor",rep("numeric",6)))

このサイズのデータ​​セットでは、それでも問題が発生する可能性があり、実行したい分析のために大量のメモリが残っているわけではありません。RAMを追加して64ビットコンピューティングを使用すると、柔軟性が高まります。

于 2010-10-19T13:27:09.793 に答える
1

これがコンソールからの出力である場合、データを読み取りますが、変換に問題があります。

インタラクティブに作業する場合は、 でread.csvデータを保存した後save(data, file="data.RData")、R を閉じ、新しいインスタンスを実行しload("data.RData")、 でデータをロードして、失敗するかどうかを確認します。

しかし、このエラー メッセージから、変換に問題があることがわかりますので、それを確認する必要があります。

于 2010-10-19T13:44:06.933 に答える