У меня есть большой файл с 6-миллионными строками, и я пытаюсь прочитать данные по частям для обработки, поэтому я не превышаю лимит ОЗУ. Вот мой код (обратите внимание, 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 = ',')
? - person mnel   schedule 18.10.2013