Я хочу извлечь элементы из столбца списка и сохранить их как новый столбец. Я могу сделать это вне функции, но не могу заставить это работать внутри функции.
В приведенном ниже примере кода я хочу, чтобы строка mutate(!!F_name := map(!!sum_name, ~.$statistic[[1]]))
извлекала статистику теста из столбца сводки модели и сохраняла ее в новом столбце. Это дает ошибку оценки $ operator is invalid for atomic vectors
.
aov_f1 <- function(df) {aov(value~ carb, data = df)}
aov_f2 <- function(df) {aov(value~ carb + gear, data = df)}
aov_sum_plus <- function(df, mod) {
mod <- enquo(mod)
sum_name <- paste0(quo_name(mod), "_sum")
F_name <-paste0(quo_name(mod), "_F")
df <- df %>%
mutate(!!sum_name := map(!! mod, broom::tidy)) %>%
mutate(!!F_name := map(!!sum_name, ~.$statistic[[1]]))
df
}
mtcars_n <- gather(mtcars, obs, value, mpg:qsec) %>%
group_by(obs) %>%
nest() %>%
mutate(aov1 = map(data, aov_f1)) %>%
mutate(aov2 = map(data, aov_f2)) %>%
aov_sum_plus(aov1) %>%
aov_sum_plus(aov2)
Эквивалентный код ниже дает желаемый результат.
aov_f1 <- function(df) {aov(value~ carb, data = df)}
aov_f2 <- function(df) {aov(value~ carb + gear, data = df)}
mtcars_n <- gather(mtcars, obs, value, mpg:qsec) %>%
group_by(obs) %>%
nest() %>%
mutate(aov1 = map(data, aov_f1)) %>%
mutate(aov2 = map(data, aov_f2)) %>%
mutate(aov1_sum = map(aov1, broom::tidy)) %>%
mutate(aov2_sum = map(aov2, broom::tidy)) %>%
mutate(aov1_sum_f = map_dbl(aov1_sum, ~.$statistic[[1]])) %>%
mutate(aov1_sum_p = map_dbl(aov1_sum, ~.$p.value[[1]])) %>%
mutate(aov2_sum_f = map_dbl(aov2_sum, ~.$statistic[[1]])) %>%
mutate(aov2_sum_p = map_dbl(aov2_sum, ~.$p.value[[1]]))