Применение предложения @ akrun в комментариях к вашей проблеме.Я думаю, что это то, что вам нужно.
# Create a dataset
Actual <- c(0,2,1,2,2,1)
Predicted <- c(0,1,0,4,1,3)
df <- data.frame(cbind(Actual, Predicted))
df
sMAAPE <- function(actual, predicted){
output<- ifelse(actual == 0 & predicted == 0,0, # If actual and predicted are 0, error is 0
abs(actual- predicted)/(abs(actual)+abs(predicted))) # otherwise your function
return(mean(output)) # Return mean of all errors
}
Вывод:
> sMAAPE(df$Actual, df$Predicted)
[1] 0.4166667
Что означает среднее значение для следующего вектора [1] 0 0.3333333 1.0000000 0.3333333 0.3333333 0.5000000
Вы можете добавить na.rm = T
к средней функции, поэтому она также обрабатывает NA.