回归模型的整洁方法,理想情况下使用dplyr

r.b*_*bot 3 regression r lm dplyr

阅读do()dplyr中的文档,我对为数据组创建回归模型的能力印象深刻,并且想知道是否可以使用不同的自变量而不是数据组来复制它.

到目前为止我已经尝试过了

require(dplyr)
data(mtcars)

models <- data.frame(var = c("cyl", "hp", "wt"))

models <- models %>% do(mod = lm(mpg ~ as.name(var), data = mtcars))
Error in as.vector(x, "symbol") : 
  cannot coerce type 'closure' to vector of type 'symbol'

models <- models %>% do(mod = lm(substitute(mpg ~ i, as.name(.$var)), data = mtcars))
Error in substitute(mpg ~ i, as.name(.$var)) : 
  invalid environment specified
Run Code Online (Sandbox Code Playgroud)

期望的最终输出将是类似的

  var slope standard_error_slope
1 cyl -2.87                 0.32
2  hp -0.07                 0.01
3  wt -5.34                 0.56
Run Code Online (Sandbox Code Playgroud)

我知道使用lapply方法可能类似的东西,但是发现apply系列很难理解.有没有dplyr解决方案?

Hon*_*Ooi 7

链接页面中的方法没有什么特别复杂的.使用substituteas.name有点神秘,但这很容易纠正.

varlist <- names(mtcars)[-1]
models <- lapply(varlist, function(x) {
    form <- formula(paste("mpg ~", x))
    lm(form, data=mtcars)
})
Run Code Online (Sandbox Code Playgroud)

dplyr不是R编程的全部和全部.我建议熟悉*apply函数,因为它们在dplyr不起作用的许多情况下都会有用.