Con solo 4 GB de RAM (ejecutando Windows 10, así que haga unos 2 o más realistas de 1 GB) tuve que tener mucho cuidado con la asignación.
Yo uso data.table casi exclusivamente.
La función 'fread' le permite subconjuntar información por nombres de campo en la importación; para empezar, solo importe los campos que realmente se necesitan. Si está utilizando la lectura de base R, anule las columnas espurias inmediatamente después de la importación.
Como sugiere 42- , siempre que sea posible, entonces subconjunto dentro de las columnas inmediatamente después de importar la información.
Frecuentemente rm () objetos del entorno tan pronto como ya no son necesarios, por ejemplo, en la siguiente línea después de usarlos para subconjugar algo más, y llamar a gc ().
'fread' y 'fwrite' de data.table pueden ser muy rápidos en comparación con las lecturas y escrituras de base R.
Como sugiere kpierce8 , casi siempre escribo todo fuera del entorno y lo vuelvo a cargar, incluso con miles / cientos de miles de pequeños archivos para pasar. Esto no solo mantiene el entorno "limpio" y mantiene baja la asignación de memoria sino que, posiblemente debido a la grave falta de RAM disponible, R tiene una propensión a fallas frecuentes en mi computadora; muy frecuentemente Tener una copia de seguridad de la información en la unidad en sí a medida que el código avanza a través de varias etapas significa que no tengo que comenzar desde el principio si falla.
A partir de 2017, creo que los SSD más rápidos se ejecutan alrededor de unos GB por segundo a través del puerto M2. Tengo un SSD Kingston V300 (550 MB / s) realmente básico de 50 GB que utilizo como mi disco principal (tiene Windows y R). Guardo toda la información a granel en una bandeja WD barata de 500 GB. Muevo los conjuntos de datos al SSD cuando empiezo a trabajar en ellos. Esto, combinado con 'fread'ing y' fwrite'ing, todo ha estado funcionando muy bien. He intentado usar 'ff' pero prefiero el primero. Sin embargo, las velocidades de lectura / escritura de 4K pueden crear problemas con esto; Hacer una copia de seguridad de un cuarto de millón de archivos de 1k (valor de 250 MB) desde el SSD a la bandeja puede llevar horas. Hasta donde yo sé, todavía no hay ningún paquete R disponible que pueda optimizar automáticamente el proceso de 'fragmentación'; por ejemplo, mira cuánta RAM tiene un usuario, pruebe las velocidades de lectura / escritura de la RAM / todas las unidades conectadas y luego sugiera un protocolo óptimo de 'fragmentación'. Esto podría producir algunas mejoras significativas en el flujo de trabajo / optimizaciones de recursos; por ejemplo, dividirlo en ... MB para el ram -> dividirlo en ... MB para el SSD -> dividirlo en ... MB en la bandeja -> dividirlo en ... MB en la cinta. Podría muestrear conjuntos de datos de antemano para darle un indicador más realista para trabajar.
Muchos de los problemas en los que he trabajado en R involucran formar pares de combinación y permutación, triples, etc., lo que solo hace que tener RAM limitada sea más una limitación, ya que a menudo se expandirán al menos exponencialmente en algún momento. Esto me ha hecho centrar mucha atención en la calidad en lugar de la cantidad de información que ingresa en ellos, en lugar de tratar de limpiarla después, y en la secuencia de operaciones para preparar la información para comenzar (comenzando con la operación más simple y aumentando la complejidad); por ejemplo, subconjunto, luego fusionar / unir, luego formar combinaciones / permutaciones, etc.
Parece haber algunos beneficios al usar la lectura y escritura de base R en algunos casos. Por ejemplo, la detección de errores dentro de 'fread' es tan buena que puede ser difícil tratar de obtener información realmente desordenada en R para comenzar a limpiarla. Base R también parece ser mucho más fácil si estás usando Linux. Base R parece funcionar bien en Linux, Windows 10 usa ~ 20 GB de espacio en disco, mientras que Ubuntu solo necesita unos pocos GB, la RAM necesaria con Ubuntu es ligeramente menor. Pero he notado grandes cantidades de advertencias y errores al instalar paquetes de terceros en (L) Ubuntu. No recomendaría alejarse demasiado de (L) Ubuntu u otras distribuciones de acciones con Linux, ya que puede perder tanta compatibilidad general que hace que el proceso sea casi inútil (creo que la 'unidad' se cancelará en Ubuntu a partir de 2017 )
Esperemos que algo de eso pueda ayudar a otros.