`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)
Другие вопросы по тегам