J'ai un grand cadre de données (de l'ordre de plusieurs Go) que j'aimerais convertir en un fichier de type data.table
. Utilisation de as.data.table
crée une copie du cadre de données, ce qui signifie que la mémoire disponible doit être au moins deux fois plus grande que la taille des données. Existe-t-il un moyen d'effectuer la conversion sans copie ?
Voici un exemple simple pour le démontrer :
library(data.table)
N <- 1e6
K <- 1e2
data <- as.data.frame(rep(data.frame(rnorm(N)), K))
gc(reset=TRUE)
tracemem(data)
data <- as.data.table(data)
gc()
Avec sortie :
> library(data.table)
data.table 1.8.10 For help type: help("data.table")
> N <- 1e6
> K <- 1e2
> data <- as.data.frame(rep(data.frame(rnorm(N)), K))
>
> gc(reset=TRUE)
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 303759 16.3 597831 32.0 303759 16.3
Vcells 100442572 766.4 402928632 3074.2 100442572 766.4
> tracemem(data)
[1] "<0x363fda0>"
> data <- as.data.table(data)
tracemem[0x363fda0 -> 0x31e4260]: copy as.data.table.data.frame as.data.table
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 304519 16.3 597831 32.0 306162 16.4
Vcells 100444242 766.4 322342905 2459.3 200933219 1533.0