Asumiré que ya está familiarizado con lo que es un data.frame: una lista de vectores de la misma longitud, con algunos atributos adicionales, como los nombres de columna.
data.table
es un paquete mantenido por Matt Dowle cuyo objetivo es lograr varios objetivos:
- Permitir que las columnas sean asignadas o modificadas por referencia.
- Permita que las tablas de datos se agreguen o resuman rápidamente usando claves.
- Cree un marco para la sintaxis que sea más fácil de leer, que genere menos repeticiones y menos errores.
Para una introducción formal al paquete, recomiendo echar un vistazo a la siguiente fuente.
- ¿Existe alguna buena información para el aprendizaje automático de pronóstico de demanda de capacitación? Estoy buscando datos de ventas de series temporales con muchos atributos.
- ¿Por qué Java no se considera apropiado para ML / ciencia de datos / aprendizaje profundo?
- ¿Qué es la clasificación?
- ¿Cómo deberían los científicos de datos abordar una situación en la que el resultado de su trabajo afecta los medios de vida de otras personas?
- Cómo dominar el aprendizaje automático en R
Para un avance rápido, aquí hay un buen ejemplo que señala cuánto mejor
data.table
es cuando se trata de administrar la memoria. Desafortunadamente, la base R es notoriamente mala a este respecto. Tome el siguiente ejemplo:
### Crear un marco de datos de juguete. data <- data.frame (x = 1:10) ### Rastree la dirección de memoria a la que R asigna nuestros datos. tracemem (datos) ### Agregar una columna da como resultado 3 copias en mi cuadro de Linux. datos $ y 0x1b14a78]: # tracemem [0x1b14a78 -> 0x1b189f8]: $ <-. data.frame $ 0x1b188d8]: $ <-. data.frame $ <-
Dado que R contiene todo en RAM, este tipo de comportamiento puede ser paralizante cuando se computa con archivos de datos más grandes. Incluso algo tan simple como cambiar los nombres de un `data.frame` puede conducir al abuso de la memoria:
tracemem (datos) nombres (datos) 0xb0a648]: # tracemem [0xb0a648 -> 0xb0a680]:
Imagine tener un archivo de datos de 10 GB en la memoria. Es una broma considerar que cambiar un nombre de variable debería hacer que se copie un objeto de 10 GB. data.table
esto al proporcionar una sintaxis que nos permite modificar objetos por referencia.
### Cree un objeto data.table. require (data.table) data <- data.table (data) ### Repite nuestro experimento. tracemem (datos) nombres de conjunto (datos, 'alfa', 'beta') datos [, z: = sin (1:10)]
Observe que al usar la función setnames
y el operador de asignación :=
que proporciona data.table
, nuestro objeto no se copia innecesariamente. Esto se vuelve muy importante cuando se trata de conjuntos de datos más grandes.
Por estas razones y muchas más, ahora me encuentro solo usando
data.table
. Incluso para conjuntos de datos más pequeños, encuentro que la sintaxis es mucho más limpia y flexible.