`Summary` несколько объектов LM и GLM
У меня 50 lm
а также glm
объекты в R. Я хочу получить сводку всех из них без необходимости вводить summary(lm...)
50 раз. Есть ли быстрый способ сделать это? Имена набора данных начинаются одинаково: lin.mod.t # или lin.mod.s#, где {# = 1,2,...,25}. Я могу перечислить все модели, используя
ls(pattern = "lin.mod")
objects(pattern = "lin.mod")
Но я не могу бежать summary
для результатов использования ls
или же objects
, я использовал summary(eval(parse(text = ls(pattern = "lin.mod"))))
, но это работает только первый. Какие-либо предложения? Может быть, использовать lapply
?
2 ответа
Как насчет этого?
# 2 sample models
lin.mod.1 <- lm(mpg ~ wt, data = mtcars);
lin.mod.2 <- lm(mpg ~ wt, data = mtcars);
# Get models and store in list
lst <- lapply(ls(pattern = "lin.mod"), get);
# Summary of models
res <- lapply(lst, summary);
Объяснение: get
все модели, которые соответствуют шаблону "lin.mod"
из текущей среды и хранить в списке lst
, использование lapply
хранить summary
всех моделей в списке res
,
Вы можете выбрать NSE версию BaseR, чтобы решить эту проблему, как показано ниже, я использую две функции, eval
а также as.name
, Вы можете выбрать as.symbol вместо as.name, так как они ведут себя одинаково:
?as.name
as.name сначала приводит свой аргумент внутренне к символьному вектору (поэтому методы для as.character не используются). Затем он берет первый элемент и при условии, что он не "", возвращает символ этого имени (и, если элемент NA_character_, имя
NA
).
?eval
eval оценивает аргумент expr в среде, заданной envir, и возвращает вычисленное значение. Если envir не указан, то по умолчанию используется parent.frame() (среда, в которой был сделан вызов eval).
lin.mod.1 <- lm(mpg ~ wt, data = mtcars)
lin.mod.2 <- lm(mpg ~ hp, data = mtcars)
lin.mod.3 <- lm(mpg ~ disp, data = mtcars)
objects_lms <- ls(pattern ="lin\\.mod")
vals <- lapply(objects_lms, function(x)eval(as.name(x)))
lapply(vals, summary)