У меня есть функция, которую я бы назвал computeMASE
для применения к 3 различным спискам forecast.list,train.list,test.list
Все они имеют общие значения (ap
, wi
). Я могу использовать эту функцию отдельно в списке, как показано в приведенном ниже коде, но когда я использую lapply
и применяю функцию для получения данных сразу, я не могу это сделать. Ниже приведен пример воспроизводимого примера. Пожалуйста, дайте мне знать, как это решить.применение функции по нескольким спискам в R
Большое спасибо
library("forecast")
## Forecast Function
for.x <- function(x){
fc <- forecast(ets(x),h=18)$mean
return(fc)
}
## MASE Function
computeMASE <- function(forecast,train,test,period){
# forecast - forecasted values
# train - data used for forecasting .. used to find scaling factor
# test - actual data used for finding MASE.. same length as forecast
# period - in case of seasonal data.. if not, use 1
forecast <- as.vector(forecast)
train <- as.vector(train)
test <- as.vector(test)
n <- length(train)
scalingFactor <- sum(abs(train[(period+1):n] - train[1:(n-period)]))/(n-period)
et <- abs(test-forecast)
qt <- et/scalingFactor
meanMASE <- mean(qt)
return(meanMASE)
}
## Prepare Data
train.list <- list(ap = ts(AirPassengers[1:(length(AirPassengers)-18)],start=start(AirPassengers),frequency=12),
wi = ts(wineind[1:(length(wineind)-18)],end=end(wineind),frequency=12))
test.list <- list(ap = ts(AirPassengers[(length(AirPassengers)-17):length(AirPassengers)],end=end(AirPassengers),frequency=12),
wi = ts(wineind[(length(wineind)-17):length(wineind)],end=end(wineind),frequency=12))
## Create Forecast
forecast.list <- lapply(train.list,for.x)
## Compute MASE for each list in the forecast
k.ap <- computeMASE(forecast.list$ap,train.list$ap,test.list$ap,12)
k.wi <- computeMASE(forecast.list$wi,train.list$wi,test.list$wi,12)
## How to apply compute MASE to all the elements in the list,? below does not work
mapply(computeMASE(X,Y,Z,12),X=forecast.list,Y=train.list,Z=test.list)
Что вы пытаетесь сделать именно? Замените две строки 'k.ap <- ...' и 'k.wi <- ...' одним вызовом функции с более высоким порядком? –
Как и в 'mapply (function (x, y, z) computeMASE (x, y, z, 12), forecast.list, train.list, test.list)'? –
@ A.Webb, это именно то, что я искал, можете ли вы разместить это как ответ, чтобы я мог его принять? спасибо – forecaster