我在R中有50个lm
和glm
个对象。我想得到所有这些对象的摘要,而不必键入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
?
答案 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 来解决此问题,如下所示,我使用的是两个函数,eval
和as.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)