Рассмотрим поэлементно l oop с Map
(оболочкой для mapply
) между двумя парами поездов и годами испытаний для поднабора:
Значения года
test_yrs <- lapply(c(2005:2015), function(i) c(2005:i) )
train_yrs <- lapply(seq(1,(2015-1970), by=2), function(i)
c(1970:2004)[c(1:i)]
)[seq_along(test_yrs)]
train_yrs
# [[1]]
# [1] 1970
#
# [[2]]
# [1] 1970 1971 1972
#
# [[3]]
# [1] 1970 1971 1972 1973 1974
#
# [[4]]
# [1] 1970 1971 1972 1973 1974 1975 1976
#
# [[5]]
# [1] 1970 1971 1972 1973 1974 1975 1976 1977 1978
#
# [[6]]
# [1] 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980
#
# [[7]]
# [1] 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982
#
# [[8]]
# [1] 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984
#
# [[9]]
# [1] 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986
#
# [[10]]
# [1] 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988
#
# [[11]]
# [1] 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990
test_yrs
# [[1]]
# [1] 2005
#
# [[2]]
# [1] 2005 2006
#
# [[3]]
# [1] 2005 2006 2007
#
# [[4]]
# [1] 2005 2006 2007 2008
#
# [[5]]
# [1] 2005 2006 2007 2008 2009
#
# [[6]]
# [1] 2005 2006 2007 2008 2009 2010
#
# [[7]]
# [1] 2005 2006 2007 2008 2009 2010 2011
#
# [[8]]
# [1] 2005 2006 2007 2008 2009 2010 2011 2012
#
# [[9]]
# [1] 2005 2006 2007 2008 2009 2010 2011 2012 2013
#
# [[10]]
# [1] 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014
#
# [[11]]
# [1] 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015
Моделирование
model_func <- function(train_yrs, test_yrs) {
train_df <- df[df$Year %in% train_yrs,]
test_df <- df[df$Year %in% test_yrs,]
mod <- lm(DepVar ~ IndepVar1 + IndepVar2 + IndepVar3, data = train_df)
pred <- predict(mod, newdata = DF.test2),
rmse <- sqrt(mean((test_df$DepVar - pred)^2))
return(list(pred = pred, rmse = rmse))
}
results_list <- Map(model_func, train_yrs, test_yrs)
# ALL ELEMENTS
results_list
# ALL pred ELEMENTS
lapply(results_list, `[`, "pred")
# ALL rmse ELEMENTS
lapply(results_list, `[`, "rmse")
# INDIVIDUAL ELEMENTS
results_list[[1]]$pred
results_list[[1]]$rmse
results_list[[2]]$pred
results_list[[2]]$rmse
...
results_list[[11]]$pred
results_list[[11]]$rmse
Чтобы запустить вышеуказанный процесс для нескольких фреймов данных, оберните процесс в метод и вызовите его с lapply
в списке фреймов данных , Результаты будут вложены в верхние уровни
proc_df <- function(df) {
# NEW PARAM
model_func <- function(train_yrs, test_yrs, df) {
...
}
# ADDED ARG
results_list <- Map(model_func, train_yrs, test_yrs, MoreArgs=list(df))
return(results_list)
}
dfs <- list(df1, df2, df3)
df_results_list <- lapply(dfs, proc_df)
# ALL ELEMENTS BY DATA FRAME
df_results_list[[1]]
df_results_list[[2]]
df_results_list[[3]]