Sembra molto intuitivo che i file .rdata possano essere il formato di file a digiuno per il caricamento di R, ma quando si analizzano alcuni dei post dello stack sembra che sia stata prestata maggiore attenzione al miglioramento dei tempi di caricamento per .csv o altri formati. C'è una risposta definitiva?Quali sono i formati di file letti in R più veloci?
risposta
Non una risposta definitiva, ma al di sotto sono momenti che ci voleva per caricare lo stesso dataframe letto come un file .tab
con utils::read.delim()
, readr::read_tsv()
, data.table::fread()
e come un file binario .RData
cronometrato utilizzando la funzione di system.time()
:
.tab
con utils::read.delim
system.time(
read.delim("file.tab")
)
# user system elapsed
# 52.279 0.146 52.465
.tab
con readr::read_tsv
system.time(
read_tsv("file.tab")
)
# user system elapsed
# 23.417 0.839 24.275
.tab
con data.table::fread
Su richiesta dello stesso file ~ 500MB caricato in un vesciche 3 secondi @Roman s':
system.time(
data.table::fread("file.tab")
)
# Read 49739 rows and 3005 (of 3005) columns from 0.400 GB file in 00:00:04
# user system elapsed
# 3.078 0.092 3.172
.RData
file binario dello stesso dataframe
system.time(
load("file.RData")
)
# user system elapsed
# 2.181 0.028 2.210
Chiaramente non definitivo (dimensione del campione = 1!) Ma nel mio caso con un frame di dati da 500 MB:
- binario
.RData
è più veloce data.frame::fread()
è un secondo vicinoreadr::read_tsv
è un ordine di grandezza più lentoutils::read.x
è più lenta e solo la metà veloce comereadr
Mi chiedo come "fread" possa gestire questo? Ti va di provarlo? –
L'ha gestito in modo follemente veloce @ RomanLuštrik – Phil
@Phil Sono abbastanza sicuro che la specifica di 'colClasses' migliorerà il tempo di lettura dei file tsv. Potrebbe valere la pena includere questo confronto. – nrussell
Questo è molto difficile, domanda per rispondere correttamente. È necessario prendere in considerazione la possibilità di convertire qualsiasi funzione di lettura dei file in codice c- o Fortran compilato e ottimizzato, ad esempio. Inoltre, poiché in genere non è possibile scegliere il formato di input a meno che non abbiate generato i file ** in R ** in primo luogo, non sono sicuro che la risposta sia davvero importante! –