En essayant de comprendre pourquoi, lorsque je lis dans un raster de NDVI, l'emplacement @ data @ values ne contient pas les valeurs réelles jusqu'à ce que je les définisse manuellement. Par exemple:
NDVI <- raster("./filename.tif", crs="+proj=longlat +datum=WGS84")
NDVI@data@values
## returns: logical(0)
Cela ne s'est pas produit avec d'autres rasters que j'avais chargés par la même méthode, donc je suis confus. J'aimerais pouvoir être plus précis mais je ne me souviens pas avoir fait autre chose auparavant. Il est assez facile d'obtenir les valeurs manuellement en utilisant:
NDVI1@data@values <- getValues(NDVI19east)
Mais c'est toujours pénible de devoir le faire pour chaque fichier. Donc, question en deux parties:
Pourquoi est-ce arrivé en premier lieu? Je comprends que cela pourrait avoir quelque chose à voir avec la façon dont le fichier raster est stocké (c'est-à-dire s'il est en mémoire ou non) mais je ne comprends pas vraiment comment cela change les méthodes que je devrais utiliser pour accéder aux données ...
Existe-t-il un moyen d'automatiser ce processus (peut-être en utilisant une méthode similaire à lapply) pour lire des fichiers en tant que RasterLayers et accéder aux valeurs de ces fichiers? Mon projet actuel consiste à lire 6 à 10 fichiers à la fois pour NDVI, Rainfall et d'autres variables environnementales, afin de les combiner et d'effectuer des superpositions pondérées. Il serait utile d'automatiser le processus d'importation des données.
logical(0)
est en fait la valeur de tout objet * raster créé à partir d' un fichier. Quoi qu'il en soit, comme le dit @mdsumner, ne lisez pas directement ces valeurs et ne les définissez certainement pas! (bien queNDVI1@data@values <- getValues(NDVI19east)
cela n'affecte rien , ces valeurs sont ignorées). C'est probablement plus loin dans votre script que vous ne comprenez pas comment utiliser efficacement ces objets. Vous pouvez utiliser getValues, mais même cela est rarement nécessaire. Donnez un exemple simple et autonome de ce que vous essayez d'accomplir.Réponses:
Cette question a été répondue dans les commentaires (par mdsummer ). C'est juste un moyen de mettre ces idées en ordre et de sortir cette question de la file d'attente sans réponse.
Ici vous pouvez télécharger le NVDI mondial de jpg de la nasa .
Ici, vous avez le code et un fichier raster à essayer .
Comme indiqué en question, le chargement du raster dans R avec la fonction raster () ne charge pas les valeurs réelles en mémoire.
Comme vous le voyez, NVDI @ data @ values n'a aucune valeur tandis que le tracé peut être rendu en montrant ces valeurs "cachées". Vous pouvez voir que si vous chargez le fichier dans QGIS, les valeurs sont réellement lues.
Donc, vous devez utiliser la fonction readAll () du package raster (comme l' a dit mdsummer dans les commentaires). Voici le code:
En utilisant cette fonction, vous pouvez maintenant accéder aux valeurs raster dans le fichier.
la source