
Afuera caía un diluvio espeso que borraba los cerros de Valdivia y en mi pantalla RStudio llevaba diez minutos completamente congelado. El ventilador de mi computador sonaba como turbina de avión, la consola no respondía y la única señal de vida era un cartel rojo que avisaba que la memoria no daba más.
El viejo raster y las tardes perdidas en la consola
Todo esto empezó porque quería mirar desde arriba el pedazo de selva valdiviana que queda detrás de mi casa. No tengo formación en cartografía ni sé de informática; trabajo media jornada en una oficina administrativa y mis ratos libres de los sábados los paso tratando de entender por qué los bosques cambian de color cuando cambia la estación. Y en ese camino, casi cualquier tutorial antiguo te manda directo a instalar el paquete raster.
Durante varias semanas probando scripts, mi rutina era casi cómica si no fuera porque me quitaba las pocas horas de luz de descanso. Una tarde de lluvia torrencial a fines de mayo, me propuse cortar una imagen para calcular vegetación. El repiqueteo constante de la lluvia sobre el techo de zinc mientras el ventilador del notebook rugía al máximo esfuerzo era la única banda sonora en mi pieza. Cargaba los datos usando raster() o stack(), le pedía una operación matemática elemental y la máquina simplemente se rendía. Pensé que era culpa de mi notebook viejito, que no daba el ancho para procesar píxeles satelitales.
Para rematar, me topé con uno de esos chascarros que nadie te explica en las guías iniciales: descubrir que la carpeta oculta de archivos temporales había acumulado decenas de gigabytes hasta dejar mi disco sin espacio para guardar un mapa. El paquete antiguo generaba archivos auxiliares diminutos por cada cálculo intermedio, y como yo ejecutaba la misma línea cinco veces intentando corregir errores de novata, terminé asfixiando el almacenamiento del sistema sin enterarme.

El salto a terra: menos vueltas y código más limpio
A mediados de julio, aburrida de reiniciar la sesión cada media hora, leí en un foro que el mismo autor del paquete original, Robert J. Hijmans, había programado una alternativa moderna llamada R terra. Decían que estaba pensado desde cero para resolver justo esas trabas que a mí me tenían al borde de abandonar los mapas.
Lo primero que me sorprendió fue la simpleza con la que maneja los datos. En el sistema viejo tenía que adivinar si me convenía usar un objeto tipo RasterLayer, un RasterStack o un RasterBrick, conceptos que para alguien que recién empieza suenan casi idénticos y enredan un montón. Con terra todo se reduce prácticamente a una sola clase: el SpatRaster. Da igual si abres una capa solitaria de elevación o un paquete entero de reflectancia, la función de entrada es siempre la misma: rast().
Cuando descargué una escena de Sentinel-2 para ver la cuenca del río Calle-Calle, noté el cambio al instante. Esas capturas del sensor MSI en su formato Level-2A vienen con 12 bandas espectrales, donde las bandas ópticas principales (el azul, verde, rojo y el infrarrojo cercano, que son B2, B3, B4 y B8) tienen una resolución espacial de 10 metros por píxel. Con el paquete anterior, apilar esas 12 bandas tomaba un buen sorbo de mate y un par de rezos para que no saltara un error de punteros. Con rast(), la lectura fue prácticamente instantánea; no porque cargue mágicamente gigas de información a la RAM de golpe, sino porque lee los metadatos y prepara las conexiones de forma sumamente ágil sin duplicar datos en segundo plano.
Si alguna vez han tenido que lidiar con desajustes espaciales al montar capas, sabrán lo frustrante que resulta. En otra ocasión escribí sobre cómo solucionar el error de extensión diferente en rasters con R, y la verdad es que muchas de esas fricciones geométricas se suavizan una barbaridad cuando las funciones nativas de terra hacen comprobaciones lógicas más directas y comprensibles.

Por qué se siente tan liviano: C++ y la limpieza de herramientas antiguas
Detrás de esa sensación de fluidez no hay magia negra, sino una decisión técnica bien concreta: el motor interno de terra está escrito mayoritariamente en C++. En lugar de pasar matrices gigantescas de un lado a otro dentro del intérprete de R, las funciones delegan el trabajo pesado a código compilado que aprovecha la memoria del procesador sin rodeos innecesarios.
Esto se nota especialmente al hacer operaciones de celda a celda. Cosas tan cotidianas como calcular diferencias de reflectancia o índices verdes se ejecutan en una fracción del tiempo habitual. De hecho, cuando estuve experimentando con cómo comparar índices de vegetación GNDVI y NDVI en RStudio, rehacer las fórmulas aritméticas directamente sobre el objeto SpatRaster me ahorró líneas enteras de código auxiliar que antes servían únicamente para evitar que la máquina colapsara.
Hay otra razón de peso por la que quedarse en el ecosistema antiguo es nadar contra la corriente. A finales de 2023 se retiraron formalmente del repositorio CRAN bibliotecas históricas como rgdal, rgeos y maptools. Esos paquetes sostenían buena parte de las funciones espaciales tradicionales. Hoy en día, mantener vivo un flujo basado en ellos implica parchar dependencias que ya nadie actualiza. terra integra sus propios enlaces a librerías geoespaciales modernas (como GDAL y PROJ) sin obligarte a instalar conectores externos que solían romperse con cada actualización del sistema operativo.

La pequeña trampa: cuando el viejo raster todavía se defiende
Ahora bien, no todo es un camino de rosas ni creo que debamos repetir ciegamente lo que dicen los manuales modernos. Después de cambiarme a terra me topé con un escenario bien particular que me dejó pensando un par de noches frías frente a la estufa de leña.
Aunque Terra es el estándar actual, para procesar series temporales masivas en memoria, el paquete raster sigue superando a Terra en estabilidad bajo configuraciones de hardware específicas. Me explico: en notebooks modestos con memoria RAM ajustada y sistemas de 64 bits antiguos, la forma en que terra maneja los punteros de C++ hacia bloques de datos muy fragmentados a veces choca con la recolección de basura del sistema. Cuando intenté apilar decenas de fechas continuas para analizar tendencias de verdor mes a mes durante varios años, terra de pronto abortaba la sesión sin dejar un mensaje claro en la consola, mientras que el viejo raster, con toda su lentitud exasperante y su manía de escribir en el disco, lograba terminar la cola de tareas sin cerrarse porque su gestor de paginación externa era sumamente conservador.
Es una sutileza que casi nadie menciona porque la mayoría de las pruebas de rendimiento se hacen sobre máquinas potentes o con escenas satelitales individuales. Si están trabajando con secuencias muy largas de fechas para evaluar cambios estacionales, vale la pena mirar con calma cómo normalizar valores de un raster en R para comparar diferentes fechas antes de mandar a procesar todo el lote de golpe, asegurándose de que la memoria no sufra sobresaltos imprevistos.
Aprender a mirar el paisaje sin pelear con el teclado
Con la llegada de los primeros brotes de la primavera y los días un poco más claros sobre los humedales de la ciudad, siento que por fin puedo enfocarme en lo que pasa afuera de mi ventana en vez de pelear con la sintaxis. El valor real de adoptar herramientas como terra no está en memorizar funciones avanzadas ni en presumir milisegundos de velocidad en un foro de programación. Está en el alivio sencillo de escribir una línea de código, darle enter, y tener tiempo para tomarse un té mientras en la pantalla aparece, nítido y en diez metros de detalle, el contorno verde de los coihues y los alerces que cubren la cordillera de la Costa.