У меня есть цикл, который должен быть выполнен;внутри которого 6 моделей.Затем объекты, в которых хранятся эти модели, должны быть переданы в функцию, которая выполняет анализ AIC.Однако иногда одна из моделей не работает, что приводит к нарушению кода для функции AIC, поскольку она не распознает какую-либо модель, в которой произошел сбой, поскольку она не была сохранена как объект.
Итак, мне нужен способ получить те модели, которые работали в функции AIC.
Вот пример, но имейте в виду, важно, чтобы все это можно было выполнить в цикле,Вот три гипотетические модели:
hn.1 <- ds(data)
hn.1.obs <- ds(data,formula = ~OBSCODE)
hn.1.obs.mas <- ds(dataformula = ~OBSCODE+MAS)
И это будет моя функция AIC, которая сравнивает модели:
summarize_ds_models(hn.1, hn.1.obs, hn.1.obs.mas)
Но я получаю ошибку, если, скажем, hn.1.obsНе удалось .mas модель.
Я попытался использовать "get" и "ls", и я успешно извлекаю модели, которые существуют, когда я звоню:
get(ls(pattern='hn.15*'))
Но это просто возвращает символьный вектор, поэтому, когда я звоню:
summarize_ds_models(get(ls(pattern='hn.15*')))
, он проводит анализ AIC только для первой модели в приведенном выше символьном векторе.
Я на правильном пути или есть лучший способ сделать это?
ОБНОВЛЕНИЕ с воспроизводимым примером.
Вот упрощенныйверсия моей проблемы:
создайте и заполните два фрейма данных, которые будут помещены в список:
data.frame <- data.frame(x = integer(4),
y = integer(4),
z = integer(4),
i = integer(4))
data.frame$x <- c(1,2,3,4)
data.frame$y <- c(1,4,9,16)
data.frame$z <- c(1,3,8,10)
data.frame$i <- c(1,5,10,15)
data.frame.2 <- data.frame[1:4,1:3]
my.list <- list(data.frame,data.frame.2)
создайте df для заполнения лучшими моделями из анализа AIC
bestmodels <- data.frame(modelname = character(2))
Вот функция, которая будет запускать цикл:
myfun <- function(list) {
for (i in 1:length(my.list)){
mod.1 = lm(y ~ x, data = my.list[[i]])
mod.2 = lm(y ~ x + z, data = my.list[[i]])
mod.3 = lm(y ~ i, data = my.list[[i]])
bestmodels[i,1] <- rownames(AIC(mod.1,mod.2,mod.3))[1]#bestmodel is 1st row
}
print(bestmodels)
}
Однако на второй итерации цикла функция AIC завершится сбоем, поскольку произойдет сбой mod.3.Итак, есть ли общий способ сделать так, чтобы функция AIC выполнялась только для тех моделей, которые работали?Результат, который я хотел бы получить здесь:
> bestmodels
modelname
1 mod.1
2 mod.1
, поскольку для обоих анализов AIC будет выбран мод.1.