下面的代码首先为mpg ~ disp打印lm,然后为mpg ~ disp + wt打印。我想在模型上创建另一个循环(请注意,第二个lm是我的personalize模型,为了简单起见,我们可以假设它是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)发布于 2021-06-08 20:46:26
您可以使用嵌套的lapply -
lapply(models, function(x) lapply(formulas, function(y) x(y, data = mtcars)))发布于 2021-06-08 20:52:43
我喜欢使用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)))))发布于 2021-06-08 23:56:35
我们可以在base R中使用outer,而且应该很快
out <- c(outer(models, formulas, Vectorize(function(x, y) list(x(y, data = mtcars)))))https://stackoverflow.com/questions/67886888
复制相似问题