从R中的两个栅格对象计算atan2?

时间:2016-03-21 05:26:07

标签: r raster

我必须使用栅格对象(u和v)download here 。 我想根据下面的等式计算速度的方向

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))

不幸的是,我收到以下错误消息:

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

然后,我引用atan2 {raster}并在下面创建一个简单的栅格对象并正常工作..

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

1 个答案:

答案 0 :(得分:1)

raster::atan2仅适用于RasterLayer个对象,不适用于RasterBrick。我已经在2.5-5版本中对此进行了修正(正在开发R-Forge)。使用当前版本,您需要使用循环:

假设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