Chunks中的read.table - 错误消息

时间:2013-10-18 03:45:59

标签: r read.table

我有一个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")以及它之后的所有内容都永远不会被执行。我能做些什么来解决这个问题吗?

谢谢。

1 个答案:

答案 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'