当 curlycurly 不起作用时如何将数据框列作为参数传递? (嵌套内的e.g.map函数)
How to pass dataframe columns as argument when curlycurly does not work? (e.g.map function within nest)
我很高兴将数据框列作为带有“curly curly”{{}}
的函数参数传递给例如过滤器()或select()。但这不适用于 nest 和 map (请参见下面的代码, lm 函数中的 {{x}} ),我不知道为什么。在这种情况下,您将如何处理?
我有以下代码,我想 运行 用于几个变量(而不仅仅是 var1,例如示例中的代码):
library(tidyverse)
library(broom)
var1 <- runif(100)
var2 <- rnorm(100)
var3 <- rnorm(100,mean=3)
group <- c(rep(1,25),rep(2,25),rep(3,25),rep(4,25))
data_set <- data.frame(var1,var2,var3,group)
nest_fct <- function(x){
new <- data_set %>%
filter(is.na({{x}}) != 1) %>%
select({{x}}, var2, group ) %>%
nest(data = -group) %>%
mutate(
fit = map(data, ~ lm({{x}} ~ var2, data = .)),
tidied = map(fit, tidy)) %>%
unnest(tidied) %>%
select(-data, -fit)
}
new <- nest_fct(var1)
我收到错误(抱歉,它是德语的):Fehler:mutate()
输入 fit
有问题。
x Variablenlängen sind unterschiedlich (gefunden für 'var2')
i 输入 fit
是 map(data, ~lm(var1 ~ var2, data = .))
.
(我想运行对每组做一个回归然后保存回归系数)
代码 运行 没有函数 "nest_fct":
new <- data_set %>%
filter(is.na(var1) != 1) %>%
select(var1, var2, group ) %>%
nest(data = -group) %>%
mutate(
fit = map(data, ~ lm(var1 ~ var2, data = .)),
tidied = map(fit, tidy)) %>%
unnest(tidied) %>%
select(-data, -fit)
这是 exexpr/expr
的一种方法
nest_fct <- function(x){
new <- data_set %>%
filter(is.na({{x}}) != 1) %>%
select({{x}}, var2, group ) %>%
nest(data = -group) %>%
mutate(
fit = map(data, ~ lm(rlang::expr(!! rlang::enexpr(x) ~ var2), data = .)),
tidied = map(fit, tidy)) %>%
unnest(tidied) %>%
select(-data, -fit)
}
new <- nest_fct(var1)
new
# A tibble: 8 x 6
# group term estimate std.error statistic p.value
# <dbl> <chr> <dbl> <dbl> <dbl> <dbl>
#1 1 (Intercept) 0.475 0.0543 8.75 0.00000000896
#2 1 var2 -0.0250 0.0492 -0.507 0.617
#3 2 (Intercept) 0.468 0.0544 8.60 0.0000000122
#4 2 var2 0.0617 0.0495 1.25 0.225
#5 3 (Intercept) 0.572 0.0616 9.29 0.00000000301
#6 3 var2 0.00304 0.0559 0.0544 0.957
#7 4 (Intercept) 0.476 0.0575 8.29 0.0000000234
#8 4 var2 0.180 0.0576 3.13 0.00473
我很高兴将数据框列作为带有“curly curly”{{}}
的函数参数传递给例如过滤器()或select()。但这不适用于 nest 和 map (请参见下面的代码, lm 函数中的 {{x}} ),我不知道为什么。在这种情况下,您将如何处理?
我有以下代码,我想 运行 用于几个变量(而不仅仅是 var1,例如示例中的代码):
library(tidyverse)
library(broom)
var1 <- runif(100)
var2 <- rnorm(100)
var3 <- rnorm(100,mean=3)
group <- c(rep(1,25),rep(2,25),rep(3,25),rep(4,25))
data_set <- data.frame(var1,var2,var3,group)
nest_fct <- function(x){
new <- data_set %>%
filter(is.na({{x}}) != 1) %>%
select({{x}}, var2, group ) %>%
nest(data = -group) %>%
mutate(
fit = map(data, ~ lm({{x}} ~ var2, data = .)),
tidied = map(fit, tidy)) %>%
unnest(tidied) %>%
select(-data, -fit)
}
new <- nest_fct(var1)
我收到错误(抱歉,它是德语的):Fehler:mutate()
输入 fit
有问题。
x Variablenlängen sind unterschiedlich (gefunden für 'var2')
i 输入 fit
是 map(data, ~lm(var1 ~ var2, data = .))
.
(我想运行对每组做一个回归然后保存回归系数)
代码 运行 没有函数 "nest_fct":
new <- data_set %>%
filter(is.na(var1) != 1) %>%
select(var1, var2, group ) %>%
nest(data = -group) %>%
mutate(
fit = map(data, ~ lm(var1 ~ var2, data = .)),
tidied = map(fit, tidy)) %>%
unnest(tidied) %>%
select(-data, -fit)
这是 exexpr/expr
nest_fct <- function(x){
new <- data_set %>%
filter(is.na({{x}}) != 1) %>%
select({{x}}, var2, group ) %>%
nest(data = -group) %>%
mutate(
fit = map(data, ~ lm(rlang::expr(!! rlang::enexpr(x) ~ var2), data = .)),
tidied = map(fit, tidy)) %>%
unnest(tidied) %>%
select(-data, -fit)
}
new <- nest_fct(var1)
new
# A tibble: 8 x 6
# group term estimate std.error statistic p.value
# <dbl> <chr> <dbl> <dbl> <dbl> <dbl>
#1 1 (Intercept) 0.475 0.0543 8.75 0.00000000896
#2 1 var2 -0.0250 0.0492 -0.507 0.617
#3 2 (Intercept) 0.468 0.0544 8.60 0.0000000122
#4 2 var2 0.0617 0.0495 1.25 0.225
#5 3 (Intercept) 0.572 0.0616 9.29 0.00000000301
#6 3 var2 0.00304 0.0559 0.0544 0.957
#7 4 (Intercept) 0.476 0.0575 8.29 0.0000000234
#8 4 var2 0.180 0.0576 3.13 0.00473