#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