質問

重複の可能性:
非常に大きなテーブルを 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 です。

役に立ちましたか?

解決

もちろん:

  1. より大きなコンピューター、特により多くのRAMを入手してください
  2. 64ビットOSを実行して、1)より多くのRAMについて使用できるようになりました
  3. 必要な列のみを読んでください
  4. より少ない行を読んでください
  5. 2GBを再格付けするのではなく、バイナリのデータを読み取ります(これは効率的ではありません)。

aもあります このためのマニュアルr サイト。

他のヒント

でデータ型を指定してみることができます 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 ビット コンピューティングを使用すると、柔軟性がさらに高まります。

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

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

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

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