Хотите сопоставить столбцы в фрейме данных и выполнить 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)
}
Это ошибка NSE, а не tidyval. Вы сопоставляете векторы внутри mtcars
. Вы не сопоставляете имена столбцов mtcars
.
С помощью inject()
из последней версии rlang вы можете программировать NSE с функциями, не относящимися к тайдиеву:
names(mtcars) %>% map(~ rlang::inject(compare_means(!!sym(.x) ~ cyl, data = mtcars))
Происходят три вещи:
inject()
и !!
.Я не тестировал код.
Я вижу, что он экспортирован: github.com/cran/rlang/blob/master/NAMESPACE#L262. Вы перезапускали R после обновления? Если да, попробуйте переустановить после закрытия всех сеансов R и RStudio (если вы работаете в Windows, легко получить проблемы с установкой).
На самом деле, это может быть просто оценка формулы:
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
, но если получится, опубликую повторно
Звучит убедительно, но я тоже не могу протестировать код:
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