如何在 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)))))
下面的代码首先为 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)))))