#r
#r
Вопрос:
Я хочу выполнить линейную модель, такую, чтобы для моих n
ковариат она выполнялась n
раз за y ~ x1
, …, y ~ xn
. Я сделал это с помощью цикла for, и поэтому я был заинтригован тем, что заставил ее работать с отображением.
Например, у map
функции есть пример, в котором она запускает линейную модель для mpg ~ wt
для каждого из уровней фактора переменной cyl
. Затем это дает три линейные модели — по одной для каждого из уровней факторов cyl
:
library(purrr)
mtcars %>%
split(.$cyl) %>%
map(~ lm(mpg ~ wt, data = .x))
Что, если бы вместо этого я захотел использовать map
функцию для запуска линейной модели для определенных переменных (например, скажем, у меня есть вектор с «cyl» и «wt» в нем, и я хотел бы запустить lm(mpg ~ cyl)
, а затем lm(mpg ~ wt)
.
Спасибо.
Ответ №1:
Мы можем использовать map2
для передачи vector
, имеющего ту же длину, что и длина list
library(tidyverse)
mtcars %>%
group_split(cyl) %>%
map2(., c("cyl", "wt", "drat"), ~ lm(paste0("mpg ~ ", .y), data = .x))
или использовать reformulate
mtcars %>%
group_split(cyl) %>%
map2(., c("cyl", "wt", "drat"), ~ lm(reformulate(.y, "mpg"), data = .x))
Если предполагается иметь несколько lm
для каждого list
элемента
mtcars %>%
group_split(cyl) %>%
map(~ {
data = .x
map(c("cyl", "wt"), ~ lm(reformulate(.x, "mpg"), data = data))
})
Комментарии:
1. Есть идеи, как сохранить имена разделения / групп в выходных данных? Я вижу, что есть этот метод: github.com/tidyverse/dplyr/issues/4223#issuecomment-469269857 но кажется сложным? Особенно при наличии нескольких групп.
2. @JasonAizkalns
split
должен сохранить этоmtcars %>% split(.$cyl)
, вgroup_split
для этого нет параметров3.@JasonAizkalns В противном случае вам необходимо использовать
keep = TRUE
mtcars %>% group_split(cyl, keep = TRUE) %>% map(~ .x$cyl)