Как сопоставить фрейм данных, это ошибка прилива?

Хотите сопоставить столбцы в фрейме данных и выполнить t-тесты с каждым столбцом по отношению к фиксированному столбцу. Желаемым результатом будет фрейм данных, в котором каждая строка (строки) будет результатами t-теста - можно использовать map_dfr после того, как процесс сопоставления будет в порядке.

Копался в аккуратном eval, не уверен, что это аккуратная ошибка eval - любая помощь очень ценится!

(mtcars как игрушечный набор данных)

library(rstatix)

# Test single cases - good
compare_means(mpg ~ cyl, data = mtcars)
compare_means(disp ~ cyl, data = mtcars)
compare_means(hp ~ cyl, data = mtcars)

# Trial map - fail

mtcars %>%
  map(~compare_means(.x ~ cyl, data = mtcars))

Error: Can't subset columns that don't exist.
x Column `.x` doesn't exist.

Следуя указаниям tidyeval: https://tidyeval.tidyverse.org/dplyr.html Пытался понять, была ли проблема в цитировании/изъятии кавычек, но не в костях

# Abstract variables

test_data <- function(group_var) {
  quote_var <- enquo(group_var)
  data %>% compare_means(quote_var ~ cyl, data = mtcars)
}

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
145
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Это ошибка NSE, а не tidyval. Вы сопоставляете векторы внутри mtcars. Вы не сопоставляете имена столбцов mtcars.

С помощью inject() из последней версии rlang вы можете программировать NSE с функциями, не относящимися к тайдиеву:

names(mtcars) %>% map(~ rlang::inject(compare_means(!!sym(.x) ~ cyl, data = mtcars))

Происходят три вещи:

  • Мы сопоставляем имена фрейма данных.
  • Преобразуем имя в символ, то есть переменную R.
  • Мы вставляем этот символ в формулу, используя inject() и !!.

Я не тестировал код.

Звучит убедительно, но я тоже не могу протестировать код: names(mtcars) %>% map(~ rlang::inject(compare_means(!!sym(.x) ~ cyl, data = mtcars))) > Error: 'inject' is not an exported object from 'namespace:rlang' у меня есть rlang 0.4.9 в R 3.6.1

Brent 10.12.2020 15:01

Я вижу, что он экспортирован: github.com/cran/rlang/blob/master/NAMESPACE#L262. Вы перезапускали R после обновления? Если да, попробуйте переустановить после закрытия всех сеансов R и RStudio (если вы работаете в Windows, легко получить проблемы с установкой).

Lionel Henry 10.12.2020 15:56
Ответ принят как подходящий

На самом деле, это может быть просто оценка формулы:

library(ggpubr)
library(tidyverse)

# Test data with 2 Species only
iris.subset <- iris %>% 
  filter(Species != 'virginica')
# Test single case
iris.subset %>% 
  compare_means(Sepal.Width ~ Species, data = .)

# Test direct map - doesn't work
iris.subset[1:4] %>% 
  map(~compare_means(. ~ Species, data = iris.subset))

Это об оценке формулы? Тест as.formula()

as.formula(paste0(names(iris.subset[1]), " ~ Species"))

# Pipe into test
names(iris.subset[1:4]) %>% 
  map_df(~compare_means(formula = as.formula(paste0(., " ~ Species")), data = iris.subset))

Успех!!

Не удалось получить пример для работы с mtcars, но если получится, опубликую повторно

Другие вопросы по теме