Czytanie fragmentów naraz za pomocą fread w pakiecie data.table

Próbuję wprowadzić duży plik rozdzielany tabulatorami (około 2 GB) za pomocąfread funkcja w pakieciedata.table. Jednak ponieważ jest tak duży, nie pasuje całkowicie do pamięci. Próbowałem wprowadzić go w porcjach, używającskip inrow argumenty takie jak:

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
}

W powyższym przypadku czytam 1 milion wierszy na raz, wykonuję na nich obliczenia, a następnie otrzymuję następny milion itd. Problem z tym kodem polega na tym, że po pobraniu każdej porcji,fread musi rozpocząć skanowanie pliku od samego początku, ponieważ po każdej iteracji pętli,skip wzrasta o milion. W rezultacie po każdym kawałkufread trwa dłużej i dłużej, aby dostać się do następnej części, czyniąc to bardzo nieefektywnym.

Czy istnieje sposób, by to powiedziećfread przerwać co 1 milion wierszy, a następnie kontynuować czytanie od tego momentu bez konieczności ponownego uruchamiania na początku? Jakieś rozwiązania lub czy powinno to być nowe żądanie funkcji?

questionAnswers(3)

yourAnswerToTheQuestion