Использование отображения при применении линейной модели к указанным переменным - PullRequest
4 голосов
/ 19 марта 2019

Я хочу выполнить линейную модель, такую, чтобы для моих 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 Ответ

2 голосов
/ 19 марта 2019

Мы можем использовать 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))
        })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...