Ich versuche ein 72-Bänder-Raster zu berechnen. Wenn der Wert der ersten 36 Bänder (nahes Infrarotband) größer ist als der Wert der letzten 36 Bänder (kurzwelliges Infrarotband), weisen Sie ihm 0 zu; wenn nicht, dann fahren Sie mit der folgenden Funktion fort. Ich habe versucht, andere Methoden zu schreiben (im Grunde die gleiche Logik) und die gleichen Fehler angezeigt. Dies ist die Funktion, die ich schrieb:Wie berechnet man mehrere Bänder gleichzeitig R Raster?
raster_stack <- stack("NIR.bin", "SWIR.bin")
#ndii = NIR - SWIR/NIR+SWIR
fun <- function(x) {
x[is.na(x)] <- 0;
if (x[37:72] >= x[1:36]){
0} else {
ndii <- ((x[1:36]-x[37:72])/(x[1:36]+x[37:72]));
silent=TRUE;
return(ndii)
}
}
ndii <- calc(raster_stack, fun)
Die Fehlermeldung ist immer dieses:
Fehler in setValues (out, x): Werte müssen numerisch sein, integer, logische oder Faktor
Ich habe x[is.na(x)] <- 0
hinzugefügt, um den NA-Wert loszuwerden, aber es scheint, dass es nicht hilft. Irgendwelche Erkenntnisse zur Lösung dieses Problems?
Ich denke, Sie müssen die Funktion aufräumen. Was ist "nd"? Der Befehl 'silent = TRUE' wird nie ausgeführt, da er nach der' return (nd) 'Zeile steht. Vielleicht möchten Sie diesen Link [Wie erstellt man ein minimales, vollständiges und überprüfbares Beispiel] (http://stackoverflow.com/help/mcve) – steveb
Sorry für die Verwirrung. "nd" bezieht sich auf den ndii-Wert, den diese Funktion berechnet. Irgendwelche Einsichten? Ich habe versucht, für Schleifen zu schreiben, aber es hilft auch nicht. –
@YuyunHe Bist du sicher, dass du binäre Dateien auf diese Weise stapeln kannst? –