2016-03-21 10 views
1

Ich muss Raster-Objekt (u und v) download here. ich die Richtung der Geschwindigkeit auf der Grundlage dieser Gleichung unterberechnen atan2 aus zwei Rasterobjekt in R?

u <- brick('D:/uv.nc', varname = 'U') 
v <- brick('D:/uv.nc', varname = 'V') 
ws <- sqrt(u^2+v^2) 
wd <- (180/pi)*(atan2(u,v)) 

Leider berechnen wollen, erhalte ich eine Fehlermeldung unter:

Error in atan2(y, x) : Non-numeric argument to mathematical function 

Dann beziehen, ich atan2 {raster} und ein einfaches Rasterobjekt erstellen unten und funktionieren ..

r1 <- r2 <- raster(nrow=10, ncol=10) 
r1[] <- (runif(ncell(r1))-0.5) * 10 
r2[] <- (runif(ncell(r1))-0.5) * 10 
atan2(r1, r2) 

Antwort

1

raster::atan2 nur für RasterLayer Objekte implementiert ist, nicht für eine RasterBrick. Das habe ich in Version 2.5-5 behoben (in Entwicklung bei R-Forge). Mit der aktuellen Version müssen Sie eine Schleife verwenden:

davon aus, dass nlayers(u) == nlayers(v)

a <- list() 
for (i in 1:nlayers(u)) { 
    a[[i]] <- atan2(u[[i]],v[[i]]) 
} 
a <- stack(a) 

wd <- (180/pi) * a 
+0

Dank für Ihren Code @RobertH, ist es sehr hilfreich ... –

+0

Hinweis 'wd <- (180/pi) * a 'ist die Richtung, die der Wind weht * zu *. Während "wd <- (180/pi) * a + 180" ist die Richtung, die der Wind weht * von *, was in meteorologischen Begriffen häufiger ist. – Badger

Verwandte Themen