Я хочу обработать собственную функцию для каждой ячейки, используя функцию calc пакета "растр".
Все работает отлично, когда я пытаюсь напечатать "окончательный" результат функции (значение Iхочу вернуться), но когда я пытаюсь использовать оператор return, я получаю ошибку:
Error in .local(x, values, ...) :
values must be numeric, integer or logical.
Вот код, приводящий к этой ошибке
inR <- 'D://test/TS_combined_clipped.tif'
outR <- 'D://test/R_test3.tif'
rasterB <- brick(inR)
fun1 <-function(x){
years = seq(1, 345)
na_idx = which(is.na(x))
years = years[-na_idx]
x <- na.omit(x)
idx = detectChangePoint(x, cpmType='Student', ARL0=500)$changePoint
return(years[idx]) # this raises error
# print(years[idx]) # This does *not* raises any error
}
r <- calc(rasterB, fun=fun1, filename=outR, overwrite=TRUE)
Как это возможноу вас есть оператор возврата, чтобы сделать его неудачным?
Некоторые из моих тестов приводят к тому, что кажется, что процесс завершается неудачно сразу после выполнения функции calc в самой последней ячейке rasterBrick.Но я понятия не имею, с чего начать, чтобы попытаться это исправить.
Входное изображение доступно здесь
[EDIT]
Я только что заметил, что если я использую return(idx)
вместо return(year[idx])
, процесс работает без возникновения ошибки.Таким образом, похоже, что проблема больше в получении значения переменной года.Поэтому есть ли какая-то особенная вещь, которую я упустил при использовании индексов с R?