2013-10-25 80 views
1

我的問題是如何計算R中兩個柵格之間的角度? 這裏是一個reproductible例子,我得到的錯誤:兩個柵格之間的計算角度

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

也許,如果添加在您的函數'回報(THETA)'聲明,並應用'angle'函數爲'r.angle < - 覆蓋(raster1,raster2,文件名='tes.tif',fun =函數(x,y){mapply(angle,x [],y [])})'?此外,在我的電腦中,我不得不將文件名更改爲'tes.tiff'來查看文件。 –

+0

感謝這使得它的工作 – WAF

回答

1

正如在評論中,更改兩件事情將解決問題。矢量化通過raster1 []和raster2 []進入,因此您需要修改該函數的應用程序。

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

,並添加在功能角()的最後一回:

return(theta) 
相關問題