首页 > 解决方案 > 使用 quosures 映射变量列表

问题描述

假设我想用来purrr::map创建一个模型列表,每个模型都使用不同的变量作为预测变量。我想我可以做这样的事情:

library(tidyverse)
myvars <- vars(cyl, disp, hp)
list_of_models <- map(myvars, function(x) lm(mpg ~ !!x, data = mtcars))

有人可以解释为什么这不起作用吗?

所需的输出是:

list(
lm(mpg ~ cyl, data = mtcars),
lm(mpg ~ disp, data = mtcars),
lm(mpg ~ hp, data = mtcars))

标签: rpurrrquosure

解决方案


这是一种不同的方法,但很容易遵循。

library(tidyverse)
library(purrr)
library(magrittr)

mtcars %>% 
 select(cyl, disp, hp) %>% 
 map(~lm(mtcars$mpg ~ .x, data = mtcars))

输出

$`cyl`

Call:
 lm(formula = mtcars$mpg ~ .x, data = mtcars)

 Coefficients:
 (Intercept)           .x  
      37.885       -2.876  


$disp

Call:
lm(formula = mtcars$mpg ~ .x, data = mtcars)

Coefficients:
 (Intercept)           .x  
     29.59985     -0.04122  


$hp

Call:
lm(formula = mtcars$mpg ~ .x, data = mtcars)

Coefficients:
 (Intercept)           .x  
     30.09886     -0.06823  

希望这可以帮助!


推荐阅读