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. 买一台更大的电脑,尤其是更多的内存
  2. 运行 64 位操作系统,请参阅 1) 关于更多 ram 现在您可以使用它
  3. 只读你需要的列
  4. 读取更少的行
  5. 以二进制读取数据,而不是重新解析 2gb(这非常低效)。

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 回答