¿Por qué la ranura @ data @ values ​​para RasterLayer solo contiene valores lógicos (0) y no los valores reales?

12

Intentando llegar al fondo de por qué, cuando leo en un ráster de NDVI, el espacio @ data @ valores no contiene los valores reales hasta que los configure manualmente. Por ejemplo:

    NDVI <- raster("./filename.tif", crs="+proj=longlat +datum=WGS84")
    NDVI@data@values
            ## returns: logical(0)

Esto no sucedió con otros rásteres que había cargado con el mismo método, por lo que estoy confundido. Desearía poder ser más específico, pero no recuerdo haber hecho nada diferente antes. Es bastante fácil obtener los valores manualmente, usando:

    NDVI1@data@values <- getValues(NDVI19east)

Pero sigue siendo un dolor tener que hacerlo para cada archivo. Entonces, una pregunta de dos partes:

  1. ¿Por qué sucedió esto en primer lugar? Entiendo que podría tener algo que ver con la forma en que se almacena el archivo ráster (es decir, si está en la memoria o no), pero realmente no puedo entender cómo eso cambia los métodos que debo usar para acceder a los datos ...

  2. ¿Hay alguna manera de automatizar este proceso (quizás usando un método similar a lapply) para leer archivos como RasterLayers y acceder a valores para esos archivos? Mi proyecto actual consiste en leer 6-10 archivos a la vez para NDVI, Rainfall y otras variables ambientales, para combinarlos y realizar algunas superposiciones ponderadas. Sería útil automatizar el proceso de importación de datos.

Henry Hawkins Wells
fuente
66
No use @ a menos que esté desarrollando código interno; use readAll (NDVI). Sucede como una técnica de eficiencia de memoria, puede abrir cuadrículas muy grandes como una especie de promesa: la trama promete extraer los datos (a través de rgdal, a través de GDAL en este caso) cuando realmente necesita los números. Si necesita guardar el objeto como un objeto R independiente que no está vinculado a un archivo, leer todo es la manera de hacerlo. ¿Ver? Ráster "En muchos casos ... no contiene (inicialmente) ningún valor de celda (píxel) en (RAM)"
mdsumner
2
De logical(0)hecho, es el valor para cualquier objeto Raster * creado a partir de un archivo. De cualquier manera, como dice @mdsumner, ¡no lea directamente estos valores, y ciertamente no los configure! (aunque NDVI1@data@values <- getValues(NDVI19east)no afectará nada , estos valores se ignoran). Probablemente esté más abajo en su secuencia de comandos, donde no comprende cómo utilizar estos objetos de manera efectiva. Puede usar getValues, pero incluso eso rara vez es necesario. Proporcione un ejemplo simple y autónomo de lo que está tratando de lograr.
Robert Hijmans
2
Muchas gracias a todos. Terminé logrando lo que necesitaba con readAll () como dijo mdsumner, así que gracias por eso, ¡fue un buen consejo! Recientemente había sido nuevo en el paquete ráster, así que honestamente aún no estaba al tanto de esa función y la necesidad de usarla para acceder a los valores reales de archivos grandes.
Henry Hawkins Wells

Respuestas:

3

Esta pregunta ha sido respondida en los comentarios (por mdsummer ). Esta es solo una forma de poner esas ideas en orden y sacar esta pregunta de la cola sin respuesta.

Aquí puede descargar la NVDI de jpg en todo el mundo desde la NASA .

Aquí tienes el código y un archivo ráster para probar .

Como se muestra en la pregunta, cargar el ráster en R con la función raster () no carga los valores reales en la memoria.

ingrese la descripción de la imagen aquí

Como puede ver, los valores de NVDI @ data @ no tienen valores, mientras que el gráfico se puede representar mostrando esos valores "ocultos". Puede ver que, si carga el archivo en QGIS, los valores se leen realmente.

ingrese la descripción de la imagen aquí

Por lo tanto, debe usar la función readAll () del paquete ráster (como dijo mdsummer en los comentarios). Aquí está el código:

library(raster)

NDVI <- raster("./RenderData.tif", crs="+proj=longlat +datum=WGS84")
NDVI@data@values
str(NDVI)
plot(NDVI)

NDVI.all <- readAll(NDVI)
head(NDVI.all@data@values)

Con esta función, ahora puede acceder a los valores ráster dentro del archivo.

ingrese la descripción de la imagen aquí

César Arquero
fuente