tutorial tables style formatstyle extensions examples data r matrix data.table

tables - Convertir datos de data.table a matrix eficientemente(velocidad y memoria)



render dt r (2)

Tengo unos datos de ~ 20,000x20,000, ¿cómo convierto de data.table() a una matrix eficiente en términos de velocidad y memoria?

Intenté m = as.matrix(dt) pero lleva mucho tiempo con muchas advertencias. df = data.frame(dt) toma mucho tiempo y también df = data.frame(dt) alcanzar los límites de memoria.

¿Hay alguna forma eficiente de hacer esto? ¿O simplemente una función en data.table que devuelve dt como una forma matricial (según sea necesario para incorporar un modelo estadístico utilizando el paquete glmnet )?

Simplemente envolver en as.matrix me da el siguiente error:

x = as.matrix(dt) Error: cannot allocate vector of size 2.9 Gb In addition: Warning messages: 1: In unlist(X, recursive = FALSE, use.names = FALSE) : Reached total allocation of 8131Mb: see help(memory.size) 2: In unlist(X, recursive = FALSE, use.names = FALSE) : Reached total allocation of 8131Mb: see help(memory.size) 3: In unlist(X, recursive = FALSE, use.names = FALSE) : Reached total allocation of 8131Mb: see help(memory.size) 4: In unlist(X, recursive = FALSE, use.names = FALSE) : Reached total allocation of 8131Mb: see help(memory.size)

Mi sistema operativo: tengo Windows 7 de 64 bits y ram de 8 gb, mi administrador de tareas de Windows muestra que Rgui.exe ocupa más de 4 gb antes y aún estaban bien.


@GibsonGay:

He cometido un error de mi parte para incluir la columna de caracteres en la matriz, lo que elevó la clase de la matriz a caracteres para todas las columnas. La eliminación de esta columna permitió realizar una matriz de enteros, se convirtió con éxito sin errores / advertencias y corrió la multa del modelo.


Tratar:

result <- as.matrix(tidytext::cast_sparse(dat_table, column_name_of_rows, column_name_of_columns, column_name_of_values))

Debe ser muy eficiente y rápido.