Я пытаюсь ввести большой файл с разделителями табуляции (около 2 ГБ) с помощью функции fread
в пакете data.table
. Однако, поскольку он настолько велик, он не полностью вписывается в память. Я попытался ввести его в куски, используя аргументы skip
и nrow
, такие как:
chunk.size = 1e6
done = FALSE
chunk = 1
while(!done)
{
temp = fread("myfile.txt",skip=(chunk-1)*chunk.size,nrow=chunk.size-1)
#do something to temp
chunk = chunk + 1
if(nrow(temp)<2) done = TRUE
}
В вышеприведенном случае я читаю по 1 миллиону строк за раз, выполняя вычисления на них, а затем получая следующий миллион и т.д. Проблема с этим кодом заключается в том, что после получения каждого фрагмента fread
необходимо начать сканирование файла с самого начала, так как после каждой итерации цикла, skip
увеличивается на миллион. В результате после каждого фрагмента fread
занимает больше времени и дольше, чтобы фактически перейти к следующему фрагменту, что делает это очень неэффективным.
Есть ли способ сказать fread
сделать паузу, скажем, 1 миллион строк, а затем продолжить чтение с этой точки без перезапуска в начале? Любые решения, или это будет новый запрос функции?