Мне нужно выполнить вычисления на больших многодиапазонных растровках и экспортировать RasterBrick, и я пытаюсь это сделать, используя функцию в растровом пакете для целей памяти эффективность. Функция работает нормально сама по себе, но когда я пытаюсь включить его в 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