【问题标题】:read.table in Chunks - error message块中的 read.table - 错误消息
【发布时间】: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


【解决方案1】:

知道了!

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'

【讨论】:

    猜你喜欢
    • 2012-07-21
    • 1970-01-01
    • 2014-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多