Ich versuche herauszufinden, warum der Slot @ data @ values beim Einlesen eines NDVI-Rasters erst dann die tatsächlichen Werte enthält, wenn ich sie manuell einstelle. Beispielsweise:
NDVI <- raster("./filename.tif", crs="+proj=longlat +datum=WGS84")
NDVI@data@values
## returns: logical(0)
Dies ist bei anderen Rastern, die ich mit der gleichen Methode geladen habe, nicht geschehen, daher bin ich verwirrt. Ich wünschte, ich könnte spezifischer sein, aber ich erinnere mich nicht, dass ich vorher etwas anderes gemacht hätte. Es ist einfach genug, die Werte manuell abzurufen, indem Sie Folgendes verwenden:
NDVI1@data@values <- getValues(NDVI19east)
Aber es ist immer noch eine Qual, dies für jede Datei tun zu müssen. Also, zweiteilige Frage:
Warum geschah das überhaupt? Ich verstehe, dass es etwas damit zu tun haben könnte, wie die Rasterdatei gespeichert wird (dh ob sie sich im Speicher befindet oder nicht), aber ich kann nicht wirklich verstehen, wie dies die Methoden ändert, die ich für den Zugriff auf die Daten verwenden sollte ...
Gibt es eine Möglichkeit, diesen Prozess zu automatisieren (möglicherweise mithilfe einer ähnlichen Methode wie lapply), um Dateien als RasterLayers zu lesen und auf Werte für diese Dateien zuzugreifen? In meinem aktuellen Projekt werden jeweils 6-10 Dateien für NDVI, Rainfall und andere Umgebungsvariablen gelesen, um sie zu kombinieren und einige gewichtete Überlagerungen durchzuführen. Es wäre hilfreich, den Import der Daten zu automatisieren.
logical(0)
ist der Wert für in der Tat jeder Raster * Objekt aus einer Datei erstellt. Wie @mdsumner sagt, lesen Sie diese Werte in beiden Fällen nicht direkt und setzen Sie sie auf keinen Fall! (obwohl IhrNDVI1@data@values <- getValues(NDVI19east)
keinen Einfluss auf irgendetwas , werden diese Werte ignoriert). Es ist wahrscheinlich weiter unten in Ihrem Skript, wo Sie nicht verstehen, wie Sie diese Objekte effektiv verwenden können. Sie können getValues verwenden, aber auch das ist selten notwendig. Geben Sie ein einfaches, in sich geschlossenes Beispiel für das, was Sie erreichen möchten.Antworten:
Diese Frage wurde in den Kommentaren beantwortet (von mdsummer ). Dies ist nur ein Weg, um diese Ideen in Ordnung zu bringen und diese Frage aus der unbeantworteten Warteschlange zu bekommen.
Hier können Sie die NVDI von jpg von der NASA herunterladen .
Hier haben Sie den Code und eine Rasterdatei zum Ausprobieren .
Wie in Frage gezeigt, werden beim Laden des Rasters in R mit der Funktion raster () die tatsächlichen Werte nicht in den Speicher geladen.
Wie Sie sehen, hat NVDI @ data @ -Werte keine Werte, während der Plot mit diesen "erweiterten" Werten gerendert werden kann. Sie sehen, dass beim Laden der Datei in QGIS die Werte tatsächlich gelesen werden.
Sie müssen also die Funktion readAll () aus dem Raster-Paket verwenden (wie in den Kommentaren von mdsummer angegeben ). Hier ist der Code:
Mit dieser Funktion können Sie jetzt auf die Rasterwerte in der Datei zugreifen.
quelle