如何在 R 中的一组不同的变量和模型上创建循环

how to create a loop over a different set of variables and models in R

下面的代码首先为 mpg ~ disp 打印出 lm,然后为 mpg ~ disp + wt。我想在模型上创建另一个循环(请注意,第二个 lm 是我的个性化模型,为了简单起见,我们可以假设它是 lm)。我怎样才能遍历不同的模型?

data("mtcars")

formulas <- list(
  mpg ~ disp,
  mpg ~ disp + wt
)

    models <- list(lm, lm)
    
    res <- vector("list", length = length(formulas))
    
    for(i in seq_along(formulas)){
      res[[i]] <- lm(formulas[[i]], data = mtcars)
    
    }
    res
    
    or
    
    lapply(formulas, lm, data = mtcars)

您可以使用嵌套 lapply -

lapply(models, function(x) lapply(formulas, function(y) x(y, data = mtcars)))

我喜欢将 tidyverse 的 purrr 用于此类多模型方法:

pacman::p_load(dplyr, purrr)
data("mtcars")

d <- crossing(formula = c(mpg ~ disp, mpg ~ disp + wt),
              model = list("lm", "glm")) %>% 
  
  mutate(result = pmap(.l = list(model, formula),
                       .f = function(m, f) do.call(m, args = list(formula = f, data = substitute(mtcars)))))

我们可以在 base R 中使用 outer 并且应该很快

out <- c(outer(models, formulas, Vectorize(function(x, y) list(x(y, data = mtcars)))))