Использование purrr для сопоставления переменных правой части с функциями регрессии

#r #purrr

Вопрос:

У меня есть большое количество регрессионных моделей, заданных ссылками на переменные правой стороны, и я хочу использовать purrr их для создания набора списков с моделями. Вот пример желаемого конечного результата с использованием игрушечных данных:

 m.1.1 <- "cyl"
m.1.2 <- paste(c(m.1.1, "disp"), collapse = "   ")


m.1.1_reg <- lm(
  data = mtcars,
  formula = as.formula(paste0("mpg ~ ", m.1.1)))


m.1.2_reg <- lm(
  data = mtcars,
  formula = as.formula(paste0("mpg ~ ", m.1.2)))
 

Как я могу достичь того же результата (т. Е. Списка с именем m.1.1_reg и другого списка с именем m.1.2_reg) с помощью purrr ?

Ответ №1:

Просто пройдите по объектам «m.1.» map и создайте формулу

 library(purrr)
out <- map(dplyr::lst(m.1.1, m.1.2), 
    ~ lm(data = mtcars, formula = as.formula(paste0("mpg ~ ", .x))))
 

-проверка имен

 > names(out)
[1] "m.1.1" "m.1.2"
 

Комментарии:

1. Спасибо-этот код запускает модели, но он не помещает результаты в списки для дальнейшего анализа.

2. @николас выходец из map является list . Если вы хотели назначить объект, сделайте out <-map(...

3. Спасибо. Я ищу тот же вывод, что и в примере кода. Итак, список с именем m.1.1_reg и другой список с именем m.1.2_reg.

4. @николас, это проще, мы можем перебирать именованный список, т. Е. dplyr::lst Делает ли это автоматически, или использовать list(m.1.1 = m.1.1, m.1.2 = m.1.2) или mget(ls(patterns = '^m\.1")) %>% map(~ ...

5. Я бы рекомендовал сохранить его в списке, а не создавать несколько объектов с assign помощью или list2env