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 unalist
(named y / o sin nombre),data.frame
(odata.table
) como entrada y devuelve el mismo objeto comodata.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