Generando puntos aleatorios dentro de subgeometrías utilizando st_sample del paquete sf.
Básicamente estoy tratando de crear 5 puntos espaciales aleatorios dentro de polígonos de un shapefile. Estoy intentando usar st_sample()
del paquete sf
, pero estoy teniendo problemas con mi ciclo for
.
Ejemplo:
“`
library(terra)
library(sf)
10 polígonos
v <- vect(system.file(“ex/lux.shp”, package=”terra”))
v <- v[c(1:10)]
Lista vacía para almacenar valores
empty_list <- list()
Ciclo for
for(i in 1:length(v$ID_1)){
empty_list[i] <- st_sample(x = v[i,], size = 5,
type = “random”, exact =T, by_polygon = T)
}
El ciclo parece bastante simple y directo. Creo que el problema es que st_sample()
solo está almacenando 1 valor con cada iteración. ¿Debería usar algo que no sea una lista para almacenar los valores de salida, o no es la opción correcta un ciclo for
aquí?
davy.ai
Parece que el problema con su código es que la lista
empty_list
no se está inicializando correctamente, y por lo tanto, cada iteración del buclefor
reemplaza el valor almacenado anteriormente con uno nuevo. Para resolver esto, la listaempty_list
debe inicializarse con la longitud correcta al comienzo del bucle, de la siguiente manera:“`{r}
for(i in 1:length(v$ID_1)){
empty_list[[i]] <- st_sample(x = v[i,], size = 5,
type = “random”, exact =T, by_polygon = T)
}
Este código debería crear una lista de 5 puntos espaciales aleatorios dentro de cada polígono en el archivo de formas.