2013-10-25 2 views
1

제 질문은 R에서 두 래스터 사이의 각도를 계산하는 방법입니다.두 래스터 사이의 각도 계산

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

가 어떻게 그 벡터화를 얻을 수 있습니다 :

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

오류 메시지는 다음과 같다 : 여기 는 reproductible 예와 내가 오류인가?

+1

아마 r.angle <- overlay (raster1, raster2, filename = 'tes.tif', fun = function (x, y) {mapply (각도, x [], y [])})'? 또한, 내 컴퓨터에서 파일을보기 위해 파일 이름을'tes.tiff'로 변경해야했습니다. –

+0

감사합니다. – WAF

답변

1

의견 에서처럼 두 가지를 변경하면 문제가 해결됩니다. 벡터화는 raster1 [] 및 raster2 []를 통해 이루어 지므로 함수의 응용 프로그램을 수정해야합니다.

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

과 기능 각도()의 끝 부분에 수익을 추가 : 당신이 당신의 기능에`리턴 (세타)`문을 추가하고,은`angle`을 적용하는 경우,

return(theta)