r - 使用 map 循环多个变量以在嵌套数据集中回归
问题描述
- 我有一个嵌套数据集,其中每一行在一列中包含一个带有主数据集子集的小标题。
- 我想对这些子集中的每一个进行回归,其中我改变了因变量。
- 我构建了一个函数来执行此操作,仅将一个变量作为因变量。
- 我正在尝试使用 map 来遍历多个可能的因变量,但似乎公式没有被正确解释。
library(purrr)
library(tidyr)
library(rlang)
reg_across_groups <- function(df, var) {
df <- df %>%
nest(data = -c("cyl"))
var_enq <- rlang::enquo(var)
model_formula <- formula(paste0(rlang::quo_name(var_enq), "~ hp"))
df %>%
dplyr::mutate(model = purrr::map(data, ~lm(model_formula, data = .x)))
}
# Works
reg_across_groups(mtcars, mpg)
reg_across_groups(mtcars, "mpg")
# Does not work
c("mpg", "wt") %>%
map(~ reg_across_groups(mtcars, .))
我收到以下错误消息:
Error in eval(predvars, data, env) : object '.' not found
解决方案
我们可以转换为符号ensym
library(dplyr)
library(tidyr)
library(purrr)
reg_across_groups <- function(df, var) {
var <- ensym(var)
df <- df %>%
nest(data = -c("cyl"))
model_formula <- formula(paste0(var, "~ hp"))
df %>%
dplyr::mutate(model = purrr::map(data, ~lm(model_formula, data = .x)))
}
c("mpg", "wt") %>%
map(~ reg_across_groups(mtcars, !!.x))
#[[1]]
# A tibble: 3 x 3
# cyl data model
# <dbl> <list<df[,10]>> <list>
#1 6 [7 × 10] <lm>
#2 4 [11 × 10] <lm>
#3 8 [14 × 10] <lm>
#[[2]]
# A tibble: 3 x 3
# cyl data model
# <dbl> <list<df[,10]>> <list>
#1 6 [7 × 10] <lm>
#2 4 [11 × 10] <lm>
#3 8 [14 × 10] <lm>
reg_across_groups(mtcars, mpg)
# A tibble: 3 x 3
# cyl data model
# <dbl> <list<df[,10]>> <list>
#1 6 [7 × 10] <lm>
#2 4 [11 × 10] <lm>
#3 8 [14 × 10] <lm>
reg_across_groups(mtcars, "mpg")
# A tibble: 3 x 3
# cyl data model
# <dbl> <list<df[,10]>> <list>
#1 6 [7 × 10] <lm>
#2 4 [11 × 10] <lm>
#3 8 [14 × 10] <lm>
推荐阅读
- android - 如何创建一个从查找表映射颜色的简单片段着色器?
- sql - postgres 解释分析结果 VS DataGrip 结果
- oracle - 使用 into 存储时的日期比较错误
- r - R中无法识别的函数Nn
- date - 如何计算日历年的平均值
- python - 如何有条件地将行转换为列?
- python - SKlearn 高斯过程回归器最大化卡方似然而不是对数边际似然
- python - 用exec,python在函数中分配变量
- spring-boot - AmqpResourceNotAvailableException:达到 channelMax 限制。等会再试
- python - 如果其中一条记录失败,Python cx_Oracle executemany() 函数如何处理异常?