Estoy utilizando la función randomPoints del paquete dismo en R para generar puntos aleatorios a partir de una pila raster. La documentación de la función randomPoints dice:
"Los puntos se muestrean (sin reemplazo) de las celdas que no son 'NA' en la 'máscara' de rasterización".
Muestro con éxito puntos aleatorios de mi pila de tramas rs
que consta de 9 capas rasterizadas, y poner los puntos en un marco de datos para facilitar su manejo.
bg <- as.data.frame(randomPoints(mask = rs, n = 5000))
length(bg[,1])
[1] 5000
Todos los puntos generados son válidos:
sum(is.na(bg))
[1] 0
Para comprobar si alguno de estos puntos es NA en la pila de trama de la máscara, extraigo la pila de trama sobre los puntos:
ext <- extract(rs, bg)
dim(ext)
[1] 5000 9
Ahora compruebo si hay alguna NA. No debería haberlos, porque la función randomPoints debería excluir las celdas de la trama de la máscara que son NA. Pero aún así:
sum(is.na(ext))
[1] 2303
Cuando miro a través del ext
veo que los NA parecen estar dispersos de forma bastante aleatoria en la pila de trama. No es una capa de trama en particular la que tiene todos los NA, y los puntos que son NA en una capa no son necesariamente NA en las otras. Entiendo que tal vez los valores no NA en mis capas de trama no coinciden perfectamente, pero de todos modos, estos deben haber sido excluidos por la función randomPoints, ¿no?
Para asegurarme, lo he vuelto a intentar, pero esta vez he seleccionado los puntos del fondo utilizando sólo una capa de la pila de trama como máscara.
bg1 <- as.data.frame(randomPoints(mask = rs[[1]], n = 5000))
Ahora, cuando compruebo si hay valores NA en las extracciones, efectivamente no hay valores NA para el ráster que se utilizó como máscara, pero sigue habiendo valores NA en algunos de los otros rásters para algunos de los puntos.
Parece que el hecho de pasar una pila de tramas a la función randomPoints, en lugar de una sola capa de tramas, no hace que la función excluya las celdas que son NA en cualquier de las capas de la pila.
¿Alguien sabe cuál es la mejor manera de resolver esto, si necesito tener puntos de fondo que no sean NA en ninguna de las capas de trama de la pila? Es posible que haya una ligera desalineación en mis capas rasterizadas (quizás en los límites entre tierra y agua), pero todas cubren la misma área y están, en su mayor parte, bien alineadas. Todo lo que se me ocurre es seleccionar puntos de fondo, extraerlos sobre los rásteres y luego excluir los que tienen al menos un valor NA, pero a.) esto es tedioso y b.) necesito asegurarme de que termino con un número determinado de puntos aleatorios; como el número de NA resultante es impredecible, no estoy seguro de cómo hacer que esto funcione.