#r #for-loop
#r #для цикла
Вопрос:
Этот код выполняет прогнозирование с помощью пакета forecast. Конечными результатами этого кода являются три списка, прогнозируемые с помощью метода snaive (SNAIVE_PIT, SNAIVE_CIT и SNAIVE_VAT).
#CODE
library(forecast)
# Making data frame
DATA_SET<-data.frame(
PIT=seq(1, 48, by = 2),
CIT=seq(1, 24, by = 1),
VAT=seq(1, 94, by = 4)
)
View(DATA_SET)
# FOR LOOP
for(i in 1:ncol(DATA_SET)){
# Build a ts for this column
timeseries <- ts(DATA_SET[,i], start=c(2016,1), frequency = 12)
# Build a foreacst based on the ts
forecast <- snaive(timeseries,h=5)
# rename the forecast according to the original variable name
colname <- colnames(DATA_SET)[i]
forecastName <- paste("SNAIVE_",colname," <- forecast",sep="")
eval(parse(text = forecastName))
}
Однако кодирование не заканчивается приведенным выше кодом. А именно, я должен расширить этот код некоторыми дополнительными элементами.
Во-первых, как поместить эту строку в приведенный выше код (часть ДЛЯ ЦИКЛА)?
#NEW CODE 1
SNAIVE_ALL<-mapply(SNAIVE_PIT, SNAIVE_CIT,SNAIVE_VAT, FUN=list, SIMPLIFY=FALSE)
Во-вторых, как поместить эту строку в приведенный выше код (часть ДЛЯ ЦИКЛА)?
#NEW CODE 2
SNAIVE_PIT_ACCURANCY<-accuracy(SNAIVE_PIT)
SNAIVE_CIT_ACCURANCY<-accuracy(SNAIVE_CIT)
SNAIVE_VAT_ACCURANCY<-accuracy(SNAIVE_VAT)
SNAIVE_ACCURANCY<-rbind(SNAIVE_PIT_ACCURANCY,SNAIVE_CIT_ACCURANCY,SNAIVE_VAT_ACCURANCY)
Итак, кто-нибудь может помочь мне с этим кодом?
Ответ №1:
Я лично считаю, что вы делаете это совершенно неправильно, код R не предназначен для постоянного создания и объединения списков, вы можете выполнять все эти операции функциональным способом, сначала вам нужно подумать, какой будет структура списка.
Я рекомендую следующую структуру
каждый набор данных представляет собой список, каждый список получает функцию, которая генерирует два списка: предсказания и точность.
Давайте закодируем.
# I recommend spliting this function but I am lazy
prediction_funtion <- function(x) {
x <- ts(x, start=c(2016,1), frequency = 12)
model <- snaive(x)
forecasts_results <- forecast(model,5)
accuracy_results <- accuracy(model)
return(list(forecast = forecasts_results,accuracy =accuracy_results))
}
map(list_df,prediction_funtion)