Вы можете написать пользовательскую функцию, которая берет имя фрукта и выполняет все шаги, необходимые для прогноза, а затем apply
эта функция выводит список всех известных вам фруктов.У меня есть пример кода здесь, но помните, что вам может потребоваться изменить многие вещи в зависимости от ваших конкретных обстоятельств.
Сначала некоторые данные:
df <- data.frame(
month = rep(1:12, times = 5),
fruit = rep(c("Apple", "Banana", "Citrus", "Date", "Elderberry"), each = 12),
sales = runif(12*5, min = 100, max = 10000)
)
Далее я хочусоздать пользовательскую функцию.В этом случае единственный аргумент, который я имею, это тип фруктов.Я мог бы хотеть добавить больше аргументов, таких как «как долго я хочу, чтобы мой прогноз был» и т. Д. Обратите внимание, что эта функция возвращает весь объект forecast
- вы можете выбрать, например, часть fitted
модель.
forecast_custom <- function(selected_fruit) {
df_sub <- subset(df, fruit == selected_fruit)
ts_sub <- ts(df_sub$sales)
forecast(ets(ts_sub))
}
Я могу запустить эту функцию, сообщив ей, какой плод прогнозировать:
forecast_custom("Apple")
Я также могу использовать что-то из семейства apply
, чтобы запустить еговсе виды фруктов одновременно.
lapply(unique(df$fruit), forecast_custom)
Если хотите, вы также можете использовать функцию map
из пакета purrr
вместо lapply
или sapply
.Функция map
немного более строга в отношении того, что входит и что выходит.Например, было бы проще создать красивый фрейм данных, используя purrr
:
forecast_custom <- function(selected_fruit) {
df_sub <- subset(df, fruit == selected_fruit)
ts_sub <- ts(df_sub$sales)
data.frame(
fruit = selected_fruit,
month = 13:24,
forecasted_sales = as.numeric(forecast(ets(ts_sub))$fitted)
)
}
> map_df(unique(df$fruit), forecast_custom)
#> fruit month forecasted_sales
#> 1 Apple 13 4781.3679
#> 2 Apple 14 4781.3330
#> 3 Apple 15 4780.8736
#> 4 Apple 16 4781.2790
#> 5 Apple 17 4781.3523