큰 멀티 밴드 래스터에서 계산을 실행하고 RasterBrick을 내보내고 메모리의 목적으로 래스터 패키지에서 calc()
함수를 사용하려고합니다. 능률. 이 기능은 그 자체로 잘 실행,하지만 난 calc()
에 포함하려고 할 때이 오류가 계속 :calc() 함수를 사용한 오류 :이 함수를 사용할 수 없습니다.
Error in .calcTest(x[1:5], fun, na.rm, forcefun, forceapply) : cannot use this function
가 어떻게이 일을 할 수 있습니까?
간체 코드 :
fn = system.file("external/test.grd", package="raster")
s = stack(fn, fn, fn, fn)
out = calc(s, fun = function(x){
for (i in 1:nlayers(x)){
x[[i]] = x[[i]] - cellStats(x[[i]], "min")
x[[i]] = x[[i]]* 5
}
list = unstack(x)
out = brick(list)
return(out)
}
)
Error in .calcTest(x[1:5], fun, na.rm, forcefun, forceapply) :
cannot use this function
감사합니다! for 루프 때문에 함수가 작동하지 않는다는 것을 알 수 있습니다. "calc"는 밴드와 인덱스를 구분합니다. 당신의 솔루션은 이전에 가지고 있던 것이지만, 더 효율적인 메모리이기 때문에'calc'가 필요합니다. 'cellStats'에 관해서는, NA 값을 갖는 얇은 것이 실제로 문제였습니다. – Danple
당신이 그것을 해결해 주어서 기쁩니다. 그러나 도움말의 경고에 유의하십시오. 각 레이어의 평균을 빼고'calc'가 청크로 작동하면 잘못된 결과가 나올 수 있습니다 (즉, 첫 번째 그룹에서 빼는 값 줄의 수는 마지막 줄에서 빼는 수와 다를 수 있습니다. – lbusett