
Eran pasadas las seis de la tarde de un sábado de lluvia intensa aquí en Valdivia —ya saben, de esas lluvias que parecen que no van a parar nunca y que te obligan a prender la estufa temprano— cuando mi laptop decidió que ya no podía más. Estaba tratando de cargar una imagen satelital completa de la cordillera de la costa para ver cómo se veía el bosque nativo desde arriba, y de pronto, el silencio de la habitación se rompió con el ventilador de mi compu sonando como si fuera a despegar hacia el espacio. RStudio se quedó congelado, el cursor no se movía y, después de unos minutos de angustia, la ventana simplemente se cerró sin decirme ni 'hola'.
Antes de que nos metamos de lleno en por qué pasa esto (y cómo lo arreglé sin tener que comprarme una computadora de la NASA), te tengo que pasar un dato importante. Algunos de los enlaces que vas a ver en esta bitácora son de afiliado. Eso significa que si terminas comprando un curso a través de ellos, a mí me llega una pequeña comisión por haberte pasado el dato, pero a ti no te cuesta ni un peso extra. Solo recomiendo cosas que yo misma he usado para no volverme loca con el código, como el curso de Teledetección Satelital con R y R-Studio que fue el que finalmente me sacó del hoyo cuando nada me funcionaba. Si un link no es de afiliado, te lo aviso igual, pero aquí todo lo que ves es porque me sirvió a mí mientras aprendía entre mate y lluvia.
¿Por qué R se rinde cuando el archivo es muy grande?
Al principio, yo pensaba que mi problema era que no sabía nada de programación (que es verdad, estoy aprendiendo de a poco), pero después de tres semanas de errores constantes, entendí que el tema es cómo R maneja la memoria. Resulta que, por defecto, muchos paquetes antiguos intentan meter toda la información de la imagen dentro de la memoria RAM. Y claro, si estás trabajando con un raster que pesa varios gigabytes y tu laptop tiene apenas 8 o 16 de RAM, el sistema colapsa. Es como tratar de meter todo el mercado fluvial de Valdivia adentro de una sola bolsa de género; tarde o temprano, la bolsa se va a romper.

Lo que me pasaba a mí era el famoso error de "cannot allocate vector of size X Gb". Me frustraba muchísimo porque yo veía que tenía espacio en el disco duro, entonces no entendía por qué R me decía que no tenía espacio. Fue en ese momento, hace un par de meses, cuando descubrí que estaba usando herramientas que ya estaban un poco pasadas de moda para archivos tan grandes. Yo seguía las instrucciones de tutoriales viejos que usaban el paquete 'raster', sin saber que existe algo mucho más moderno llamado 'terra'.
Como cuento en mi experiencia aprendiendo teledetección con R sin ser programadora, este camino tiene muchas piedras, pero una vez que entiendes que el problema no es tu equipo sino el flujo de trabajo, todo cambia. El paquete 'terra' está escrito en un lenguaje llamado C++, que es mucho más rápido, y lo mejor de todo es que no carga toda la imagen a la RAM de un viaje, sino que crea un "puntero" al archivo en el disco. Es decir, R sabe que la imagen está ahí, pero solo lee los pedacitos que necesita en cada momento.
El gran cambio: De 'raster' a 'terra'
Si todavía estás usando library(raster) y se te pega el computador, mi primer consejo de amiga es: cámbiate a library(terra). La diferencia es abismal. Recuerdo que un domingo de estudio intenso, después de almorzar, me propuse pasar todo mi código a este nuevo paquete. Al principio me dio un poco de miedo porque los nombres de las funciones cambian un poquito, pero la lógica es casi la misma.
Por ejemplo, una imagen de Landsat 8, que tiene una resolución espacial de 30 metros, puede ser pesadísima porque trae 11 bandas de información. Si intentas procesar las 11 bandas al mismo tiempo sin una estrategia, vas a ver la pantalla gris de la muerte de RStudio muy seguido. Con 'terra', el comando para cargar es rast(), y es increíblemente eficiente. Me acuerdo que cuando logré cargar mi primera imagen completa sin que el ventilador gritara, casi me pongo a bailar en el living.

Además, algo que aprendí a porrazos es que no siempre necesitas cargar la imagen completa del satélite si solo quieres ver el bosque que está detrás de tu casa. Las imágenes de Landsat cubren áreas enormes, y yo solo necesitaba un pedacito de la Región de Los Ríos. Aquí es donde entran las funciones de recorte (crop) y máscara (mask). Si recortas tu área de interés apenas cargas el archivo, el resto del procesamiento vuela. Si te interesa saber cómo manejar estas capas cuando las proyecciones no coinciden (otro dolor de cabeza común), te recomiendo leer cómo corregir proyecciones cartográficas en R de forma sencilla.
Trucos que me salvaron la vida (y la RAM)
Otro error que cometía mucho era tratar de graficar (hacer el mapa) de la imagen gigante de una sola vez. R intenta dibujar cada uno de los millones de píxeles, y ahí es cuando se queda pegado. Ahora lo que hago es usar la función plot() pero con un límite de píxeles, o simplemente trabajo con una versión de baja resolución para ir probando si el código está bien antes de correr el proceso final. Es lo que llaman "lazy evaluation" o evaluación perezosa: R no hace el cálculo pesado hasta que de verdad le pides el resultado final.
También aprendí a fijarme en los sistemas de coordenadas. A veces el error no es de memoria, sino que R se marea porque estás mezclando peras con manzanas. Casi siempre trato de trabajar con el código EPSG para WGS84, que es el 4326, porque es el estándar mundial y evita que las capas aparezcan volando por cualquier lado. Esto es clave si después quieres hacer cosas más avanzadas, como lo que aprendí en el curso de modelado de especies con Maxent, donde si los rasters no calzan perfecto, nada funciona.
- Usa el paquete terra: Es el sucesor moderno y eficiente de 'raster'.
- Define tu área de estudio (ROI): Usa
crop()lo antes posible para reducir el tamaño de los datos en memoria. - Cuidado con los archivos temporales: R genera muchos archivos basura mientras procesa. Asegúrate de limpiar tu carpeta temporal de vez en cuando.
- Trabaja con los tipos de datos correctos: A veces cargamos números decimales cuando solo necesitamos números enteros, y eso duplica el peso del archivo.

Reflexiones de fin de semana
Mirando hacia atrás, a esa tarde de invierno donde casi tiro la toalla, me doy cuenta de que la teledetección es un ejercicio de paciencia, especialmente cuando aprendes sola y no tienes un servidor gigante para procesar datos. Mi laptop sigue siendo la misma, pero mi forma de trabajar cambió. Ya no trato de forzar a la máquina a hacer todo de una vez; ahora divido las tareas, recorto mis áreas de interés y confío en herramientas que están diseñadas para gente como nosotros, que tenemos equipos normales.
Si sientes que te estás hundiendo en errores de memoria y que R no es para ti, no te desanimes. A veces solo falta que alguien te explique que no necesitas más RAM, sino un mejor paquete. A mí me sirvió muchísimo estructurar mi aprendizaje con el curso de Teledetección Satelital con R y R-Studio, porque te enseñan justamente a manejar estos volúmenes de datos sin morir en el intento. Es una inversión, sí, pero comparado con las tardes de frustración que me ahorró, valió cada peso.
Ahora, cuando miro por la ventana y veo que el bosque se ve un poco más amarillo o más verde según la estación, ya sé exactamente cómo bajar la imagen, cargarla sin que se me pegue el compu y sacar un mapa que me cuente la historia de lo que está pasando allá arriba. Y eso, para alguien que empezó de cero en un invierno valdiviano, es una satisfacción que no tiene precio. ¡Ánimo con esos mapas!