Leyendo en trozos a la vez usando fread en el paquete de datos.

Estoy tratando de ingresar un archivo grande delimitado por tabulaciones (alrededor de 2GB) usando elfread función en el paquetedata.table. Sin embargo, como es tan grande, no cabe completamente en la memoria. Intenté ingresarlo en trozos usando elskip ynrow argumentos tales como:

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
}

En el caso anterior, estoy leyendo en un millón de filas a la vez, realizando un cálculo en ellas y luego obteniendo el siguiente millón, etc. El problema con este código es que después de que se recupera cada fragmento,fread debe comenzar a escanear el archivo desde el principio, ya que después de cada iteración de bucle,skip Aumenta en un millón. Como resultado, después de cada trozo,fread se tarda más y más en llegar al siguiente fragmento, lo que hace que sea muy ineficiente.

Se puede decir de alguna manerafread ¿Pausa cada 1 millón de líneas y luego continúa leyendo a partir de ese momento sin tener que reiniciar al principio? ¿Alguna solución, o debería ser una nueva solicitud de características?

Respuestas a la pregunta(3)

Su respuesta a la pregunta