我应该读一个大的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列)。我该怎样做才能更快地完成这项工作?
答案 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机器。