【发布时间】:2013-10-26 19:11:51
【问题描述】:
我有一个包含 60 万行的大文件,我正在尝试以块的形式读取数据以进行处理,这样我就不会达到我的 RAM 限制。这是我的代码(注意 temp.csv 只是一个包含 41 条记录的虚拟文件):
infile <- file("data/temp.csv", open="r")
headers <- as.character(read.table(infile, header = FALSE, nrows=1, sep=",", stringsAsFactors=FALSE))
while(length(temp <-read.table(infile, header = FALSE, nrows=10, sep=",", stringsAsFactors=FALSE)) > 0){
temp <- data.table(temp)
setnames(temp, colnames(temp), headers)
setkey(temp, Id)
print(temp[1, Tags])
}
print("hi")
close(infile)
在最后一次迭代之前,一切都顺利进行。我收到此错误消息:
Error in read.table(infile, header = FALSE, nrows = 10, sep = ",", stringsAsFactors = FALSE) :
no lines available in input
In addition: Warning message:
In read.table(infile, header = FALSE, nrows = 10, sep = ",", stringsAsFactors = FALSE) :
incomplete final line found by readTableHeader on 'data/temp.csv'
大概这是因为最后一次迭代只有 1 行记录,而 read.table 应该是 10 行?
所有数据实际上都被很好地读取了。令人惊讶的是,即使在最后一次迭代中,temp 仍然会转换为data.table。但是print("hi") 以及它之后的所有内容都不会被执行。有什么办法可以解决这个问题吗?
谢谢。
【问题讨论】:
-
如果你只运行
fread("data/temp.csv", sep = ',')会发生什么? -
@mnel 即使使用 read.table 我也能够加载整个数据集。问题是我在处理阶段遇到了 RAM 问题,所以我需要将其拆分。
标签: r read.table