2010-10-19 53 views
4

可能重复:
Quickly reading very large tables as dataframes in R如何在R读取大型数据集

嗨,

试图读取大型数据集R中控制台显示的follwing错误:

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

相关:http://stackoverflow.com/questions/1875795/best-practices-for-storing-and-using-data-frames-too-large-for-memory和http://stackoverflow.com/questions/3340568 /设置大数据库在mysql-for-analysis-in-r – 2010-10-19 12:21:42

+0

另请参阅:http://yusung.blogspot.com/2007/09/dealing-with-large-data-set- in-r.html和http://ff.r-forge.r-project.org/bit&ff2.1-2_WU_Vienna2010.pdf – 2010-10-19 12:22:25

回答

13

肯定的:

  1. 获取更大的计算机,特别是更多的RAM
  2. 运行64位操作系统,参见图1)关于更多的内存,现在你可以使用它
  3. 只读列你需要
  4. 读取更少的行
  5. 以二进制读取数据而不是重新解析2gb(这是非常低效的)。

R网站上还有一个manual for this

1

您可以使用colClasses尝试在read.csv调用中指定数据类型。

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

虽然这种规模仍可能是有问题的,并且没有留给你可能需要做任何分析的存储大量的数据集。使用64位计算添加RAM &将提供更多的灵活性。

1

如果这是从控制台输出,然后您读取数据,但转换有问题。

如果您以交互方式工作,然后read.csv将您的数据保存为save(data, file="data.RData"),请关闭R,运行新的实例,使用load("data.RData")加载数据,并查看它是否失败。

但是,从这个错误消息我看到你有转换的问题,所以你应该看看。