
Aprieto enter después de escribir crop(mi_raster, mi_poligono) en RStudio, y el círculo de carga ni siquiera alcanza a dar una vuelta completa: esa es la primera señal de que voy por el camino correcto. Recortar un raster con un shapefile no es aplicar una sola función y listo, aunque varios tutoriales de teledetección lo hagan ver así. Es una secuencia de dos pasos con el paquete terra (primero acotar el rectángulo que envuelve tu zona, después aplicar la forma exacta del polígono), y si inviertes el orden o te saltas uno, tu computador va a sufrir por nada. Esto es lo que aprendí trabajando con datos SIG desde una laptop que ya no daba para más, y es la base que cualquiera que recién parte en RStudio necesita tener clara antes de meterse en cosas más avanzadas.
El shapefile en R no es un solo archivo
Un shapefile es el formato de polígonos típico de los Sistemas de Información Geográfica, y lo primero que nadie te avisa es que no es un archivo único, aunque el nombre lo sugiera. Para que R lo reconozca necesitas al menos tres archivos con el mismo nombre pero distinta extensión, guardados en la misma carpeta: el .shp, que es el dibujo en sí, el .shx, que funciona como índice, y el .dbf, que guarda los atributos de cada polígono. Si falta uno solo, R tira un error que no dice "te falta el índice", sino algo mucho más críptico, y ahí uno se queda mirando la pantalla sin saber por dónde partir. La organización de las carpetas terminó siendo, sin exagerar, la mitad del trabajo, algo que fui detallando en mi experiencia aprendiendo teledetección con R sin ser programadora. Guardar cada shapefile en su propia carpeta, sin mezclarlo con archivos de otros proyectos, evita la mayoría de estos dolores de cabeza.

Crop() y mask() con terra: el orden que le ahorra tiempo a tu computador
Antes se usaba mucho un paquete llamado raster, pero hoy la recomendación casi unánime es cambiarse a terra: maneja mejor la memoria y responde más rápido, algo vital si tu equipo ya está en las últimas. terra no es el único paquete espacial que existe en R; hay varios más, cada uno con su enfoque particular, pero ese repaso completo da para otro texto. Tampoco me voy a detener aquí en qué es exactamente un raster y cómo guarda sus valores por píxel, porque eso también es tema aparte; para este recorte basta con saber que cada píxel tiene un valor y una posición dentro de una grilla. Lo que sí importa es el orden de dos funciones: crop() corta el raster siguiendo el rectángulo más pequeño que contiene tu polígono, y es rápido porque solo mira los bordes, no la forma interior. mask(), en cambio, revisa píxel por píxel y convierte en NA todo lo que queda fuera del polígono real, dejando la silueta exacta de tu zona en vez de un rectángulo. Aplicar mask() directamente sobre un raster gigante, sin haber hecho crop() antes, obliga a tu computador a evaluar cada píxel de la imagen original para decidir si lo conserva, un desperdicio de tiempo enorme comparado con acotar primero y enmascarar después sobre un archivo ya reducido. Antes de llegar a esto probé aprender QGIS siguiendo un tutorial, y me perdí en los menús desde el primer paso, sin encontrar dónde estaba lo que necesitaba. Se lo comenté una vez a Isidora Moya, compañera del mismo camino autodidacta que encontré por YouTube, y me dijo que a ella le pasó lo mismo: el código, por intimidante que parezca al principio, termina siendo más predecible que perderse en una interfaz gráfica llena de menús. Fue ella, de hecho, quien me avisó de un tutorial en español que por fin explicaba esto sin dar tantas vueltas.
¿Por qué el raster sale en blanco después de recortar?
Si sigues estos pasos y aun así el mapa sale completamente blanco, o R tira un error diciendo que las extensiones no coinciden, el problema casi siempre es el famoso Sistema de Referencia de Coordenadas (CRS). A mí me pasó con un shapefile que estaba en coordenadas geográficas, latitud y longitud, mientras mi raster estaba en UTM, en la zona 18S que le corresponde a esta parte de Chile, el código EPSG 32718. Cuando el CRS del raster y el del vector no coinciden, crop() y mask() no logran encontrar dónde se superponen, aunque a simple vista ambos archivos parezcan cubrir la misma zona del mapa. Explicar a fondo qué es una proyección cartográfica y por qué existen tantas da para una conversación completa aparte, pero para resolver esto en la práctica basta con comparar crs(mi_raster) == crs(mi_vector): si el resultado es FALSE, usa project() para llevar uno de los dos archivos al sistema del otro antes de seguir. Ese chequeo, hecho al principio y no después de media hora de intentos fallidos, es lo que separa un recorte que funciona a la primera de una tarde entera mirando un gráfico vacío.

Los pasos completos, de principio a fin
Puesto en orden, el proceso completo queda así: cargar el raster con rast("tu_imagen.tif"), cargar el shapefile con vect("tu_poligono.shp"), comparar los sistemas de referencia con crs(raster) == crs(vector) y reproyectar con project() si el resultado es FALSE, aplicar crop() para achicar el área de trabajo al rectángulo que envuelve el polígono, y recién ahí aplicar mask() para quedarte con la forma exacta de tu zona de estudio. Tengo estos pasos anotados a mano en una carpeta de papel donde voy guardando los errores que ya resolví, porque cuando algo funciona a la primera me da desconfianza y prefiero tener el orden escrito en algún lado que no sea solo la memoria. Si el archivo original es tan pesado que ni siquiera alcanza a cargar antes de llegar a este punto, el problema ya no es el orden de las funciones sino cómo le estás pidiendo a R que lea los datos, y ahí sirve más revisar la solución a errores comunes al cargar rasters pesados en R que insistir con el mismo código sobre un archivo que tu equipo no puede ni abrir.
Para qué sirve tener el raster ya recortado
Tener el raster acotado a la forma exacta de tu polígono no es el final del camino, es más bien el punto de partida para lo que sigue. Fue Raimundo Saavedra, un conocido de las salidas de montaña, quien me contó por primera vez que existía algo llamado NDVI para medir qué tan sana está la vegetación a partir de las bandas espectrales de una imagen satelital — ese cálculo completo es tema para otro día, pero ningún índice de ese tipo sirve de mucho si antes no tienes el raster acotado a tu zona exacta. Cuando corrí ese cálculo sobre un polígono del Jardín Botánico de la Universidad Austral de Chile, apareció un parche rojo justo donde debería haber verde continuo, en el tramo del sendero que se despeja cada verano. Sin el recorte previo, ese parche se habría perdido en medio de una imagen que cubre una región entera, invisible entre miles de píxeles que no me interesaban. Lo mismo aplica si lo que buscas es preparar capas para modelar dónde podría estar presente una especie a partir de variables ambientales: ese tipo de modelado necesita rasters ya acotados y alineados entre sí, no la escena completa tal como viene descargada. Y aunque terra tenga fama de paquete técnico, una vez que el orden de crop() y mask() queda claro, lo que viene después (índices, modelos, comparaciones entre distintas fechas) se vuelve bastante más manejable de lo que parece la primera vez que uno abre RStudio y no entiende nada.