HOWTO · R

Aumentar la memoria en R

Este tutorial demuestra cómo aumentar la memoria en R.

En esta página

Cuando R indica que no puede asignar memoria, distingue primero entre la memoria disponible en el equipo y los límites del proceso de R. R no puede usar más memoria física de la que el sistema puede proporcionar, y el sistema operativo o un contenedor pueden imponer sus propios límites de recursos. Una opción de configuración de R puede cambiar el límite del proceso cuando sea compatible; no añade RAM ni garantiza que una determinada carga de trabajo pueda ejecutarse.

Los controles disponibles dependen de la versión de R, del sistema operativo y de cómo se inicia R. Antes de aplicar una opción, consulta la documentación de inicio correspondiente a la versión instalada. Anota el mensaje de error exacto e identifica los objetos y las operaciones más grandes de la carga de trabajo; esa información ayuda a determinar si el principal obstáculo es la configuración, el tamaño de los datos o una copia intermedia.

Entender qué limita la memoria de R

Un proceso de R usa memoria para los objetos, los resultados temporales, los paquetes y la sobrecarga del entorno de ejecución. Operaciones como combinar tablas, cambiar la estructura de los datos o convertir tipos pueden requerir memoria adicional mientras los objetos originales siguen en uso. Por eso, un conjunto de datos que cabe en el disco puede necesitar mucha más memoria durante un cálculo.

No hay un único valor de «memoria de R» que describa todos los límites. La RAM física, el espacio de intercambio o la memoria virtual disponibles, el espacio de direcciones del proceso y un límite específico del montón de R son restricciones distintas. El sistema operativo y la compilación de R determinan cuáles se aplican. Elevar un límite específico de R no permite superar un límite del sistema, y un límite mayor puede hacer que el proceso consuma recursos que necesitan otros programas.

Aumentar la memoria de R en Windows

No sigas las instrucciones antiguas para los accesos directos de Windows de versiones anteriores de R sin comprobar que correspondan a la versión instalada. En la consola de R, consulta R.version.string y luego revisa la ayuda de inicio de esa versión para conocer las opciones admitidas. La documentación de la línea de comandos de R describe las opciones de inicio; si la documentación de tu instalación admite --max-vsize, añade el valor documentado al comando que inicia R. En un acceso directo, esto significa agregar la opción después de la ruta entre comillas de Rgui.exe, dejando un espacio entre la comilla de cierre y la opción. Conserva la ruta existente del ejecutable y cualquier otro argumento necesario.

El flujo Propiedades y Destino de Windows cambia la forma en que ese acceso directo inicia R; no aumenta la memoria física del equipo. Si usas RStudio, cambiar el acceso directo de Rgui.exe no configura necesariamente la sesión de R que inicia RStudio. Configura el lanzador que realmente inicia la sesión afectada y reinicia esa sesión para que se apliquen las opciones de inicio. No des por hecho que los privilegios de administrador hacen efectiva una opción no admitida.

Configurar límites admitidos al iniciar R

Usa únicamente una opción de inicio o una variable de entorno documentada para tu versión de R y tu plataforma. La referencia de variables de entorno del manual de administración de R documenta R_MAX_VSIZE; consúltala junto con la documentación de la línea de comandos de R para ver las opciones de inicio. Si la versión instalada documenta --max-vsize y R_MAX_VSIZE, úsalos para configurar el montón de vectores; de lo contrario, no des por hecho que admite esos nombres. El valor representa un tamaño: consulta esa documentación para conocer la sintaxis y las unidades aceptadas. Define una variable de inicio antes de iniciar R; cambiarla dentro de una sesión existente no reconfigura esa sesión.

Para iniciar R una sola vez desde un shell POSIX, el patrón es R_MAX_VSIZE=value R, donde value debe usar la sintaxis documentada para tu instalación. Es un patrón, no un límite configurado que debas copiar literalmente. En Windows, define una variable documentada en el entorno que se usa para iniciar R o pasa la opción documentada al lanzador correspondiente. No des por hecho que R_MAX_MEM_SIZE, --max-mem-size o ulimit -v controlan el montón de vectores de R: su compatibilidad y sus efectos varían según la plataforma y la versión, y un límite del sistema operativo puede restringir el proceso.

Recuperar objetos que ya no se usan con gc()

R puede recuperar la memoria ocupada por objetos a los que ya no se puede acceder. Elimina las referencias a objetos grandes cuando ya no los necesites; gc() solicita la recolección de basura e informa sobre las estadísticas de memoria. No puede recolectar un objeto que todavía tenga referencias, elevar un límite del proceso ni garantizar que la memoria que R libera aparezca de inmediato como disponible para el sistema operativo.

Ejecuta este ejemplo:

El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.

values <- seq_len(100000)
total <- sum(values)
rm(values)
gc()
print(total)
         used (Mb) gc trigger (Mb) max used (Mb)
Ncells 273719 14.7     660948 35.3   452023 24.2
Vcells 459142  3.6    8388608 64.0  1800334 13.8
[1] 5000050000

Las estadísticas de recolección de basura varían según la compilación de R y la sesión; el resultado estable de este ejemplo es el total que se imprime. Las etiquetas visibles y la salida del bloque de ejemplo se conservan en inglés porque el bloque no se traduce. En los scripts habituales, R inicia la recolección de basura cuando hace falta; llamar a gc() después de cada operación rara vez resulta útil y puede añadir trabajo. Conserva la llamada a rm() solo si el objeto ya no se necesita en ningún otro lugar.

Verificar el cambio y diagnosticar los errores de falta de memoria que persisten

Inicia un proceso nuevo de R después de cambiar una opción de inicio o una variable de entorno. Comprueba la versión instalada con R.version.string y consulta gc() para ver las estadísticas actuales del montón. Compara la opción o las estadísticas observadas con la documentación de esa versión; que R se inicie correctamente no demuestra por sí solo que haya aceptado el límite solicitado. Vigila también la memoria del sistema, porque el sistema operativo aún puede impedir una asignación.

memory.limit() es una función heredada y específica de Windows. La documentación actual de R-devel sobre los límites de memoria de utils indica que está en desuso en el sentido de que ya no funciona; no la uses para aumentar la memoria cuando esa condición se aplique a tu versión de R. Si trabajas con una versión anterior, consulta su ayuda antes de confiar en esta función; no es una opción general para todas las plataformas. Ejecutar RStudio o R con privilegios elevados no restablece la compatibilidad cuando la función ya no funciona en esa versión.

Si el error persiste, anota el mensaje completo, la versión de R, la plataforma, el lanzador y la operación que falló. Busca copias temporales grandes, elimina los objetos que ya no necesites, procesa los datos en bloques o usa una representación que evite cargarlos todos a la vez. Considera aumentar un límite admitido del montón de vectores solo si el sistema dispone de recursos suficientes y la documentación correspondiente confirma que la opción es compatible. Ningún límite garantiza que desaparezcan los errores de falta de memoria en todas las cargas de trabajo.