write.csv pour les grandes data.table en R

J’ai une data.table qui n’est pas très grande (2 Go) mais pour une raison quelconque, write.csv prend beaucoup de temps pour l’écrire (je n’ai jamais fini d’attendre) et semble utiliser une tonne de RAM pour le faire il. J’ai essayé de convertir le data.table en un data.frame bien que cela ne devrait pas vraiment faire grand chose puisque data.table étend data.frame . quelqu’un a-t-il rencontré ça? plus important encore, si vous l’arrêtez avec CtrlC , R ne semble pas redonner de la mémoire.

MISE À JOUR 08.04.2016 :

fwrite a été récemment ajouté à la version de développement du package data.table. Il s’exécute également en parallèle (implicitement).

 # Install development version of data.table install.packages("data.table", repos = "https://Rdatatable.github.io/data.table", type = "source") # Load package library(data.table) # Load data data(USArrests) # Write CSV fwrite(USArrests, "USArrests_fwrite.csv") 

Selon les tests de tests détaillés montrés sous l’ accélération des performances de write.table , fwrite est ~ 17 fois plus rapide que write.csv (YMMV).


MISE À JOUR 15.12.2015 :

Dans le futur, il pourrait y avoir une fonction fwrite dans le package data.table , voir: https://github.com/Rdatatable/data.table/issues/580 . Dans ce fil, un GIST est lié, ce qui fournit un protype pour une telle fonction accélérant le processus d’un facteur 2 (selon l’auteur, https://gist.github.com/oseiskar/15c4a3fd9b6ec5856c89 ).

RÉPONSE ORIGINALE :

J’ai eu les mêmes problèmes (en essayant d’écrire des fichiers CSV encore plus volumineux) et j’ai finalement décidé d’utiliser les fichiers CSV.

Je vous recommande d’utiliser SQLite car il est beaucoup plus rapide que de traiter des fichiers CSV:

 require("RSQLite") # Set up database drv <- dbDriver("SQLite") con <- dbConnect(drv, dbname = "test.db") # Load example data data(USArrests) # Write data "USArrests" in table "USArrests" in database "test.db" dbWriteTable(con, "arrests", USArrests) # Test if the data was correctly stored in the database, ie # run an exemplary query on the newly created database dbGetQuery(con, "SELECT * FROM arrests WHERE Murder > 10") # row_names Murder Assault UrbanPop Rape # 1 Alabama 13.2 236 58 21.2 # 2 Florida 15.4 335 80 31.9 # 3 Georgia 17.4 211 60 25.8 # 4 Illinois 10.4 249 83 24.0 # 5 Louisiana 15.4 249 66 22.2 # 6 Maryland 11.3 300 67 27.8 # 7 Michigan 12.1 255 74 35.1 # 8 Mississippi 16.1 259 44 17.1 # 9 Nevada 12.2 252 81 46.0 # 10 New Mexico 11.4 285 70 32.1 # 11 New York 11.1 254 86 26.1 # 12 North Carolina 13.0 337 45 16.1 # 13 South Carolina 14.4 279 48 22.5 # 14 Tennessee 13.2 188 59 26.9 # 15 Texas 12.7 201 80 25.5 # Close the connection to the database dbDisconnect(con) 

Pour plus d’informations, voir http://cran.r-project.org/web/packages/RSQLite/RSQLite.pdf

Vous pouvez également utiliser un logiciel tel que http://sqliteadmin.orbmu2k.de/ pour accéder à la firebase database et exporter la firebase database au format CSV, etc.