首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用quosure在变量列表上进行映射

使用quosure在变量列表上进行映射
EN

Stack Overflow用户
提问于 2019-08-21 23:22:16
回答 2查看 118关注 0票数 0

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

代码语言:javascript
复制
library(tidyverse)
myvars <- vars(cyl, disp, hp)
list_of_models <- map(myvars, function(x) lm(mpg ~ !!x, data = mtcars))

有人能解释一下为什么这个不起作用吗?

所需的输出为:

代码语言:javascript
复制
list(
lm(mpg ~ cyl, data = mtcars),
lm(mpg ~ disp, data = mtcars),
lm(mpg ~ hp, data = mtcars))
EN

回答 2

Stack Overflow用户

发布于 2019-08-21 23:24:50

一种选择是转换为字符串,使用reformulate创建公式并将其传递给lm

代码语言:javascript
复制
library(rlang)
library(purrr)
out2 <- map(myvars, ~ {
       fmla <- reformulate(as_name(.x), 'mpg')
       lm1 <- lm(fmla, data = mtcars)
       lm1$call$formula <- fmla
       lm1 })

-output

代码语言:javascript
复制
out2
#[[1]]

#Call:
#lm(formula = mpg ~ cyl, data = mtcars)

#Coefficients:
#(Intercept)          cyl  
#     37.885       -2.876  


#[[2]]

#Call:
#lm(formula = mpg ~ disp, data = mtcars)

#Coefficients:
#(Intercept)         disp  
#   29.59985     -0.04122  


#[[3]]

#Call:
#lm(formula = mpg ~ hp, data = mtcars)

#Coefficients:
#(Intercept)           hp  
#   30.09886     -0.06823  

使用OP的输出执行-checking

代码语言:javascript
复制
out1 <- list(
     lm(mpg ~ cyl, data = mtcars),
      lm(mpg ~ disp, data = mtcars),
      lm(mpg ~ hp, data = mtcars))
setequal(out1, out2)
#[1] TRUE
票数 0
EN

Stack Overflow用户

发布于 2019-08-22 05:41:25

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

代码语言:javascript
复制
library(tidyverse)
library(purrr)
library(magrittr)

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

输出

代码语言:javascript
复制
$`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  

希望这能有所帮助!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57594836

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档