计算两个栅格之间的角度

时间:2013-10-25 09:36:00

标签: r angle raster

我的问题是如何计算R中两个栅格之间的角度? 这是一个可重现的例子和我得到的错误:

angle <-function(vectora, vectorb){
      theta <- acos( sum(vectora*vectorb) / ( sqrt(sum(vectora * vectora)) * sqrt(sum(vectorb * vectorb)) )) 
}

raster1 <- raster(ncols=150, nrows=150, xmn=0)
raster1[] <-  rnorm(150*150,ncell(1))
raster2 <- raster(ncols=150, nrows=150, xmn=0)
raster2[] <-  rnorm(150*150,ncell(2))

r.angle <- overlay(raster1,raster2, filename='tes.tif',fun=function(x,y){angle(x,y)})

错误消息如下:

Error in (function (x, fun, filename = "", recycle = TRUE, ...)  : 
  cannot use this formula, probably because it is not vectorized

如何获得矢量化?

1 个答案:

答案 0 :(得分:1)

在评论中,更改两件事将解决问题。矢量化通过raster1 []和raster2 []进入,因此您需要修改函数的应用程序。

function(x,y){angle(x[],y[])})

并在函数angle()的末尾添加一个返回值:

return(theta)