Cómo crear una lista de lista y luego realizar una función vectorizada sobre ella

Estoy buscando dos puntos de ayuda específicos en esta solicitud 1) cómo crear una lista de listas dada mi base de datos (all.df) a continuación 2) cómo vectorizar una función sobre esta lista de listas

Estoy tratando de generar un pronóstico a nivel de cliente / producto usando la biblioteca Prophet. Estoy luchando por vectorizar la operación. Actualmente ejecuto un bucle for, que quiero evitar y acelerar mis cálculos.

Datos para el análisis.
set.seed(1123)
df1 <- data.frame(
  Date     = seq(dmy("01/01/2017"), by = "day", length.out = 365*2),

  Customer = "a",
  Product  =  "xxx",
  Revenue  = sample(1:100, 365*2, replace=TRUE))


df2 <- data.frame(
  Date     = seq(dmy("01/01/2017"), by = "day", length.out = 365*2),

  Customer = "a",
  Product  =  "yyy",
  Revenue  = sample(25:200, 365*2, replace=TRUE)) 


df3 <- data.frame(  
  Date     = seq(dmy("01/01/2017"), by = "day", length.out = 365*2),

  Customer = "b",
  Product  =  "xxx",
  Revenue  = sample(1:100, 365*2, replace=TRUE))



df4 <- data.frame(  
  Date     = seq(dmy("01/01/2017"), by = "day", length.out = 365*2),

  Customer = "b",
  Product  =  "yyy",
  Revenue  = sample(25:200, 365*2, replace=TRUE) )

all.df <- rbind(df1, df2, df3, df4)
Esta es mi función de pronóstico
daily_forecast <- function(df, forecast.days = 365){


# fit actuals into prophet
m <- prophet(df, 
             yearly.seasonality = TRUE,
             weekly.seasonality = TRUE,
             changepoint.prior.scale = 0.55)  # default value is 0.05

# create dummy data frame to hold prodictions
future <- make_future_dataframe(m, periods = forecast.days, freq = "day")

# run the prediction 
forecast <- predict(m, future)

### Select the date and forecast from the model and then merge with actuals
daily_fcast     <- forecast %>% select(ds, yhat) %>% dplyr::rename(Date = ds, fcast.daily = yhat) 
actual.to.merge <- df %>% dplyr::rename(Date = ds, Actual.Revenue = y)
daily_fcast     <- merge(actual.to.merge, daily_fcast, all = TRUE)

}
Actualmente, trabajo a través de un cliente / producto a la vez usando un bucle for
x <- df1 %>% select(-c(Customer, Product)) %>% 
  dplyr::rename(ds = Date, y = Revenue) %>%
  daily_forecast()

En cambio, me gustaría vectorizar toda la operación:

1-Cree una lista de lista, es decir, divida all.df por:

a) Producto y luego

b) por cliente

2-Luego haga que la función daily_forecast se asigne sobre la lista de la lista creada en 1) arriba

Me gustaría mucho usar funciones fuera depurrr.

Respuestas a la pregunta(1)

Su respuesta a la pregunta