如何映射数据框,这是一个潮汐错误吗?
How to map over dataframe, is it a tidyeval error?
想要映射数据框中的列并对每一列针对固定列执行 t 检验。所需的输出将是一个数据帧,每行都是 t 检验结果 - 可以使用 map_dfr
一旦映射过程正常
深入研究 tidy eval,不确定它是否是 tidy 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.
遵循潮汐指导: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 错误,但不是 tidyeval。您正在映射 mtcars
内的向量。您没有映射 mtcars
.
的列名
使用上一个 rlang 版本的 inject()
,您可以使用非潮汐函数进行一些 NSE 编程:
names(mtcars) %>% map(~ rlang::inject(compare_means(!!sym(.x) ~ cyl, data = mtcars))
三件事正在发生:
- 我们映射数据框的名称。
- 我们将名称转换为 符号,即 R 变量。
- 我们使用
inject()
和 !!
将该符号注入到公式中。
我没有测试代码。
其实可能只是公式求值 具体来说:
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
一起使用的示例,但如果我这样做会重新 post
想要映射数据框中的列并对每一列针对固定列执行 t 检验。所需的输出将是一个数据帧,每行都是 t 检验结果 - 可以使用 map_dfr
一旦映射过程正常
深入研究 tidy eval,不确定它是否是 tidy 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.
遵循潮汐指导: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 错误,但不是 tidyeval。您正在映射 mtcars
内的向量。您没有映射 mtcars
.
使用上一个 rlang 版本的 inject()
,您可以使用非潮汐函数进行一些 NSE 编程:
names(mtcars) %>% map(~ rlang::inject(compare_means(!!sym(.x) ~ cyl, data = mtcars))
三件事正在发生:
- 我们映射数据框的名称。
- 我们将名称转换为 符号,即 R 变量。
- 我们使用
inject()
和!!
将该符号注入到公式中。
我没有测试代码。
其实可能只是公式求值 具体来说:
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
一起使用的示例,但如果我这样做会重新 post