La lectura de ~ 5x10^6 valores R en R desde un archivo de texto es relativamente lenta en mi máquina (unos segundos, y leo varios de esos archivos), incluso con scan(..., what="numeric", nmax=5000)
o trucos similares. ¿Valdría la pena intentar un contenedor Rcpp
para este tipo de tarea (por ejemplo, Armadillo
tiene algunas utilidades para leer archivos de texto)? ¿O es probable que esté perdiendo el tiempo por poco o nada de rendimiento debido a una sobrecarga de interfaz esperada? No estoy seguro de lo que actualmente limita la velocidad (rendimiento intrínseco de la máquina, ¿o sí?) Es una tarea que repito muchas veces al día, generalmente, y el formato de archivo siempre es el mismo, 1000 columnas, alrededor de 5000 filas.más rápido que escanear() con Rcpp?
Aquí hay un archivo de muestra para jugar, si es necesario.
nr <- 5000
nc <- 1000
m <- matrix(round(rnorm(nr*nc),3),nr=nr)
cat(m[1, -1], "\n", file = "test.txt") # first line is shorter
write.table(m[-1, ], file = "test.txt", append=TRUE,
row.names = FALSE, col.names = FALSE)
actualización: Probé read.csv.sql
y también load("test.txt", arma::raw_ascii)
usando Armadillo y ambos eran más lenta que la solución scan
.
Pruebe 'read.csv.sql' en sqldf y vea si es más rápido. Es solo una línea de código. http://sqldf.googlecode.com –
Intenté 'system.time (b <- read.csv.sql (" test.txt ", header = FALSE, sep =" "))' y fue más lento que 'system .time (a <- scan ("test.txt", what = "numérico")) '. Además, creo que almacenar los datos en una matriz debería ser más eficiente que en un 'data.frame' – baptiste