Use lapply for multiple regression with formula changing, not the dataset

|▌冷眼眸甩不掉的悲伤 提交于 2019-12-01 10:53:43

This should work:

fit <- lapply(myvars, function(dvar) lm(eval(paste0(dvar,' ~ wt')), data = Boston))

Consider creating dynamic formulas from string:

fit <- lapply(myvars, function(dvar)
    lm(as.formula(paste0(dvar, " ~ indus")),data=Boston))

You can also use a dplyr & purrr approach, keep everything in a tibble, pull out what you want, when you need it. No difference in functionality from the lapply methods.

library(dplyr)
library(purrr)
library(MASS)
library(stargazer)

var_tibble <- tibble(vars = c("nox","crim"), data = list(Boston)) 

 analysis <- var_tibble %>% 
  mutate(models = map2(data, vars, ~lm(as.formula(paste0(.y, " ~ indus")), data = .x))) %>% 
  mutate(tables = map2(models, vars, ~stargazer(.x, type = "text", dep.var.labels.include = FALSE, column.labels = .y)))

You can also use get():

# make a list of independent variables
  list_x <- list("nox","crim")

# create regression function
  my_reg <- function(x) { lm(indus ~ get(x), data = Boston) }

# run regression
  results <- lapply(list_x, my_reg)
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!