Lettura ~ 5x10^6 i valori numerici in R da un file di testo sono relativamente lenti sulla mia macchina (alcuni secondi e ho letto molti di questi file), anche con scan(..., what="numeric", nmax=5000)
o trucchi simili. Potrebbe essere utile provare un wrapper Rcpp
per questo tipo di attività (ad esempio, Armadillo
ha alcune utilità per leggere i file di testo)? O probabilmente sprecherei il mio tempo per un guadagno minimo o nullo nelle prestazioni a causa di un sovraccarico previsto dell'interfaccia? Non sono sicuro di cosa stia limitando la velocità (prestazioni intrinseche della macchina o altro?) È un'attività che ripeto molte volte al giorno, in genere, e il formato del file è sempre lo stesso, 1000 colonne, circa 5000 righe.più veloce di scan() con Rcpp?
Ecco un file di esempio con cui giocare, se necessario.
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)
Aggiornamento: ho provato read.csv.sql
e anche load("test.txt", arma::raw_ascii)
utilizzando Armadillo ed entrambi erano più lenti rispetto alla soluzione scan
.
Prova 'read.csv.sql' in sqldf e vedere se questo è più veloce. È solo una riga di codice. http://sqldf.googlecode.com –
Ho provato 'system.time (b <- read.csv.sql ("test.txt", intestazione = FALSE, settembre =" "))' ed era più lento di 'sistema .time (a <- scan ("test.txt", cosa = "numerico")) '. Inoltre, penso che la conservazione dei dati in una matrice dovrebbe essere più efficiente di in un 'data.frame' – baptiste