es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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í?

Tags:  , , , ,

Answer

  1. Avatar for 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 bucle for reemplaza el valor almacenado anteriormente con uno nuevo. Para resolver esto, la lista empty_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)
    }


    Tenga en cuenta que se utilizan corchetes dobles para asignar correctamente valores a los elementos de la lista. Alternativamente, podría usar la función `lapply` para evitar el uso de un bucle `for` y simplificar el código: ```{r} empty_list <- lapply(v, function(x) st_sample(x = x, 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.

Comments are closed.