tutorial studio sheet paquete data create cheat r dataframe reference data.table

sheet - r studio create data table



Convierte un marco de datos a un data.table sin copia (1)

Esto está disponible desde v1.9.0+ . De NEWS :

o Después de esta publicación SO , ahora se implementa una función setDT que toma una list (named y / o sin nombre), data.frame (o data.table ) como entrada y devuelve el mismo objeto como data.table por referencia (sin ninguna dupdo). Ver ?setDT ejemplos para más.

Esto está de acuerdo con la convención de nombres de data.table - todas las funciones set* modifican por referencia. := es el único otro que también se modifica por referencia.

require(data.table) # v1.9.0+ setDT(data) # converts data which is a data.frame to data.table *by reference*

Consulte el historial de respuestas antiguas (ahora desactualizadas).

Tengo un marco de datos grande (del orden de varios GB) que me gustaría convertir a data.table . Usar as.data.table crea una copia del marco de datos, lo que significa que necesito que la memoria disponible sea al menos el doble del tamaño de los datos. ¿Hay alguna manera de hacer la conversión sin una copia?

Aquí hay un ejemplo simple para demostrar:

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()

Con salida:

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