Muchas gracias a los dos.

Al final lo he resuelto utilizando la función scan() con un un código del
tipo (para leer una matriz de enteros con row.names y colN columnas)

auxData <- scan( fileName, what = c( " ", as.list( rep( 0L, colN ) ) ) )
myMat <<- do.call(cbind, auxData[-1])
row.names(myMat) <<- auxData[[1]]

el ahorro (no del todo preciso porque en el código hacía otras cosas
secundarias) es del orden de un 10% del tiempo de lectura, un 60% memoria
(segun el Taks Manager de Windows), y el de no tener que buscar un
ordenador en el trabajo más potente (jejeje, sin necesidad de utilizar
otros paquetes) para leer los archivos.

Aleix


El 29 de enero de 2013 18:37, Carlos J. Gil Bellosta
<cgb@datanalytics.com>escribió:

> Hola, ¿qué tal?
>
> > Por otro lado, si escribo un fichero de texto con un único 1, y lo leo
> con
> > read.table, me devuelve un data.frame de 680 bytes y, en particular, el 1
> > (elemento [1,1]) es un "integer" que ocupa 48 bytes, cuando tengo
> entendido
> > que la representación de un entero ocupa 1 byte. Entiendo que un
> "integer"
> > de R tenga más cosas que la pura representación numerica, pero puede ser
> > esto la causa de que al leer archivos mayores, la memoria se me dispare?
>
> Seguramente, [1,1] no es un "integer" (aunque lo parezca):
>
> > object.size(rep(1,1000))
> 8040 bytes
> > object.size(rep(1L,1000))
> 4040 bytes
> > typeof(1)
> [1] "double"
> > typeof(1L)
> [1] "integer"
>
> R utiliza 4 bytes para los enteros (que lo sean realmente) y 8 para
> los "doubles". Al menos, en mi máquina. Puedes ver lo que hace en la
> tuya corriendo
>
> .Machine
>
> Sobre la memoria necesaria para leer un fichero de texto con
> read.table, generalmente, hace falta el triple de la que ocupa el
> fichero. O eso creo recordar. Si lo hago bien (miré esas cosas hace
> tiempo), read.table conserva tres copias del objeto (con
> transformaciones) en memoria para leer línea a línea y convertir en un
> df que almancena datos columna a columna y los transforma en su
> formato.
>
> Además, en función del tipo de datos que haya en tu fichero ("1" ocupa
> un byte, pero R necesita 8 para almacenarlo) hay una "explosión" en el
> uso de memoria.
>
> Un saludo,
>
> Carlos J. Gil Bellosta
> http://www.datanalytics.com
>

	[[alternative HTML version deleted]]

