`Summary`多个LM和GLM对象

时间:2017-12-09 22:29:09

标签: r glm lm

我在R中有50个lmglm个对象。我想得到所有这些对象的摘要,而不必键入summary(lm...) 50次。有快速的方法吗?数据集的名称以相同的方式开始: lin.mod.t# lin.mod.s#其中{#= 1,2,...,25 }。我可以使用

列出所有模型
ls(pattern = "lin.mod")
objects(pattern = "lin.mod")

但是,对于使用summaryls的结果,我无法运行objects。我使用summary(eval(parse(text = ls(pattern = "lin.mod")))),但这只运行第一个。有什么建议?也许使用lapply

2 个答案:

答案 0 :(得分:1)

这个怎么样?

# 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

答案 1 :(得分:0)

您可以选择 NSR BaseR 来解决此问题,如下所示,我使用的是两个函数,evalas.name,你可以选择as.symbol而不是as.name,因为它们的行为类似:

?as.name
  

as.name首先在内部强制转换为字符向量   (因此不使用as.character的方法)。然后它采取第一个   如果元素不是&#34;&#34;返回该名称的符号(如果元素是NA_character_,则名称为NA)。

?eval
  

eval评估envir指定的环境中的expr参数   并返回计算值。如果没有指定envir,那么   default是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)