使用一个函数在R中运行预定义的公式

时间:2013-09-02 12:14:04

标签: r formula

对于我的项目我需要运行许多不同的模型,但同时类似,因为只有一个变量发生变化,我想让这个过程尽可能简单易行(我的R脚本此刻很长......)

data(mtcars)   
Model1 <- formula(mpg ~ cyl + disp)    
Model2 <- formula(mpg ~ cyl + hp)    
Model3 <- formula(mpg ~ cyl + wt)    
Model4 <- formula(mpg ~ cyl + qsec)  
All.Models <- cbind(Model1, Model2, Model3, Model4) 

有没有办法在模型函数(lm(),aov()等)上运行所有公式,特别是All.Models,并指定数据集(这里是mtcars,但我有不同的数据集对于相同的型号)?

我尝试了以下两个版本:

All.Ouput1 <- lm(lapply(All.Models), data=mtcars)

All.Output2 <- lapply(All.Models, lm(All.Models, data=mtcars))

在第一个中它运行了几分钟,直到我不得不手动停止它,第二个给我一个错误

此外str(All.Models)是一个列表,其中模型需要3行

str(All.Models)
List of 12
 $ : symbol ~
 $ : symbol mpg
 $ : language cyl + disp
 $ : symbol ~
 $ : symbol mpg
 $ : language cyl + hp
 $ : symbol ~
 $ : symbol mpg
 $ : language cyl + wt
 $ : symbol ~
 $ : symbol mpg
 $ : language cyl + qsec
 - attr(*, "dim")= int [1:2] 3 4
 - attr(*, "dimnames")=List of 2
  ..$ : NULL
  ..$ : chr [1:4] "Model1" "Model2" "Model3" "Model4"

提前谢谢

1 个答案:

答案 0 :(得分:3)

这是你想要的吗?

data(mtcars)   
F1 <- formula(mpg ~ cyl + disp)    
F2 <- formula(mpg ~ cyl + hp)    
F3 <- formula(mpg ~ cyl + wt)    
F4 <- formula(mpg ~ cyl + qsec)  
All.formulas <- list(F1, F2, F3, F4) 

All.models <- lapply(All.formulas,lm,data=mtcars)
lapply(All.models,summary)

公式不是真正的模型。

具有明显回归调用的解决方案:

customF <- function(x) {

    out.model <- lm(x,data=mtcars)
    out.model$call <- x
    return(out.model)
}


All.models <- lapply(All.formulas,customF)
lapply(All.models,summary)

可能有一种更优雅的方式,但这也有效。