从csv文件中读取数据需要很长时间

时间:2014-02-19 14:48:07

标签: r csv

我应该读一个大的CSV文件(超过30000行和10000列)。不知怎的,我应该逐列读取数据。这是我的代码:

con<-file("D:\\Data.csv","r")
datalist<-list()
for(spalte in 5:5)
{
  for(i in 1:20000)
  {

    line<-readLines(con,n=1,warn=FALSE)
    m<-list(as.integer(unlist(strsplit(line,split=","))))
    datalist<-c(datalist,sapply(m,"[[",spalte))

  }

}

但是这段代码只需要4分钟就可以读取一列(在本例中为第5列)。我该怎样做才能更快地完成这项工作?

2 个答案:

答案 0 :(得分:2)

不要为解决好的问题发明自己的解决方案。如果read.csv给您带来内存不足错误,那么:

1)确保使用的是64位R(没有4GB RAM限制)。

2)忽略一些不需要节省空间的行。 colbycol package对此非常有用。

3)将文件读入数据库,然后从中导入所需内容。有很多解决方案;首先阅读this SO question的答案。

4)购买更多RAM,或在具有更多RAM(可能是云服务器)的远程工作站上运行分析,或使用内存不足的软件包。请参阅Task View on High Performance Computing

答案 1 :(得分:0)

尝试fread(文件名)。它在data.table包中。读取大文件非常快。

system.time(fread('abc.csv'))
user  system elapsed 
0.41    0.00    0.40 

system.time(read.csv('abc.csv'))
user  system elapsed 
2.28    0.02    2.29 

如果您遇到内存问题,那么Richie建议使用64位并尝试在服务器上运行,或者您甚至可以获得具有大RAM的Amazon EC2机器。