我有一个6mil行的大文件,我正在尝试以块的形式读取数据进行处理,所以我没有达到我的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")
以及它之后的所有内容都永远不会被执行。我能做些什么来解决这个问题吗?
谢谢。
答案 0 :(得分:2)
啊得到了它!
repeat{
temp <-read.table(infile, header = FALSE, nrows=10, sep=",", stringsAsFactors=FALSE)
temp <- data.table(temp)
setnames(temp, colnames(temp), headers)
setkey(temp, Id)
print(temp[1, Tags])
if (nrow(temp) < 10) break
}
print("hi")
这仍会产生警告信息,但不会再出现错误:
Warning message:
In read.table(infile, header = FALSE, nrows = 10, sep = ",", stringsAsFactors = FALSE) :
incomplete final line found by readTableHeader on 'data/temp.csv'