Вот ваш упрощенный код с некоторыми примерами данных (вот как вы должны задать вопрос здесь).
library(raster)
f <- system.file("external/rlogo.grd", package="raster")
Landsat <- raster(f, 1)
AVHRR <- raster(f, 3)
error <- Landsat - AVHRR
#You can do
#[1] 25.52578
#mae <- mean(abs(values(error)))
#mae
#[1] 15.28597
Но безопасным для памяти способом было бы сделать
cellStats(error, "rms")
#[1] 25.52742
cellStats(abs(error), "mean")
#[1] 15.28597
Обратите внимание, что я возвращаю одно "глобальное" значение, в то время как ваши функции возвращают растр, что предполагает, что вам нужна "локальная" статистика ошибок.Но это имеет смысл, только если у вас есть многослойные растровые данные.В вашем примере вы не делаете;но см. ниже для местного примера.
Так в чем причина вашей ошибки?Вы делаете
#actual <- c(Landsat)
#predicted <- c(AVHRR)
#error <- actual - predicted
Или с данными нашего примера
error <- c(Landsat) - c(AVHRR)
#Error in c(Landsat) - c(AVHRR) : non-numeric argument to binary operator
Это потому, что c(Landsat)
создает list
и вы не можете вычесть два списка.
class(c(Landsat))
#[1] "list"
Вы могли бы делать
error <- c(Landsat)[[1]] - c(AVHRR)[[1]]
(но зачем вам)
Если вам нужны "локальные" значения, вы можете сделать что-то вроде следующего:
library(raster)
f <- system.file("external/rlogo.grd", package="raster")
Landsat <- stack(f)
AVHRR <- Landsat[[3:1]]
error <- Landsat - AVHRR
mae <- mean(abs(error))
plot(mae)