如何让 R 使用 rstatix 读取函数变量
How to get R to read function variables with rstatix
我正在尝试对大型数据框执行多个独立的 t 检验。当我创建一个循环到 运行 的函数时,测试 rstatix 不会将函数变量作为变量读取并输入它们的值。
示例数据
if(!require(rstatix)){install.packages("rstatix");library('rstatix')}
set.seed(1)
df <- data.frame(
Type = sprintf("Type_%s", rep.int(1:2, times = 10)),
Read = rnorm(20))
T 检验
stat.test <- df %>%
t_test(Read ~ Type, paired = FALSE)
stat.test
没有统计数据的图
ggplot(df, aes(x = Type, y = Read)) +
geom_boxplot(aes(fill= Type)) +
geom_dotplot(binaxis='y', stackdir='center', dotsize=1, binwidth = 1/30)
示例函数(工作正常!)
my.function <-
function(df, var1, var2) {
ggplot(df, aes_string(x = var1, y = var2)) +
geom_boxplot(aes_string(fill= var1)) +
geom_dotplot(binaxis='y', stackdir='center', dotsize=1, binwidth = 1/30)
}
my.function(df, 'Type', 'Read')
我的问题
my.function <-
function(df, var1, var2) {
stat.test <- df %>%
t_test(var2 ~ var1, paired = FALSE)
ggplot(df, aes_string(x = var1, y = var2)) +
geom_boxplot(aes_string(fill= var1)) +
geom_dotplot(binaxis='y', stackdir='center', dotsize=1, binwidth = 1/30) +
stat_pvalue_manual(stat.test, label = "p", y.position = 2.1)
}
my.function(df, 'Type', 'Read')
上面的 returns 是一个错误,因为 rstatix 认为 var1
和 var2
是示例数据框中的列。
我尝试了以下方法让 R 停止该行为,但两次尝试都失败了。
尝试 1
my.function <-
function(df, var1, var2) {
stat.test <- df %>%
t_test(eval(parse(var2)) ~ eval(parse(var1)), paired = FALSE)
ggplot(df, aes_string(x = var1, y = var2)) +
geom_boxplot(aes_string(fill= var1)) +
geom_dotplot(binaxis='y', stackdir='center', dotsize=1, binwidth = 1/30) +
stat_pvalue_manual(stat.test, label = "p", y.position = 2.1)
}
my.function(df, 'Type', 'Read')
尝试 2
my.function <-
function(df, var1, var2) {
stat.test <- df %>%
t_test(eval(as.name(paste(var2))) ~ eval(as.name(paste(var1))), paired = FALSE)
ggplot(df, aes_string(x = var1, y = var2)) +
geom_boxplot(aes_string(fill= var1)) +
geom_dotplot(binaxis='y', stackdir='center', dotsize=1, binwidth = 1/30) +
stat_pvalue_manual(stat.test, label = "p", y.position = 2.1)
}
my.function(df, 'Type', 'Read')
我进入了 t_test 函数,看看是否有任何迹象表明为什么我尝试将此自定义函数添加到 运行 会失败。我怀疑这个问题与 R 处理公式和函数的方式有关。在对我的原始脚本进行了一些操作之后,我终于让它工作了。
my.function <-
function(df, var1, var2) {
stat.test <- df %>%
t_test(as.formula(paste(var2, '~', var1)), paired = FALSE)
ggplot(df, aes_string(x = var1, y = var2)) +
geom_boxplot(aes_string(fill= var1)) +
geom_dotplot(binaxis='y', stackdir='center', dotsize=1, binwidth = 1/30) +
stat_pvalue_manual(stat.test, label = "p", y.position = 2.1)
}
my.function(df, 'Type', 'Read')
我正在尝试对大型数据框执行多个独立的 t 检验。当我创建一个循环到 运行 的函数时,测试 rstatix 不会将函数变量作为变量读取并输入它们的值。
示例数据
if(!require(rstatix)){install.packages("rstatix");library('rstatix')}
set.seed(1)
df <- data.frame(
Type = sprintf("Type_%s", rep.int(1:2, times = 10)),
Read = rnorm(20))
T 检验
stat.test <- df %>%
t_test(Read ~ Type, paired = FALSE)
stat.test
没有统计数据的图
ggplot(df, aes(x = Type, y = Read)) +
geom_boxplot(aes(fill= Type)) +
geom_dotplot(binaxis='y', stackdir='center', dotsize=1, binwidth = 1/30)
示例函数(工作正常!)
my.function <-
function(df, var1, var2) {
ggplot(df, aes_string(x = var1, y = var2)) +
geom_boxplot(aes_string(fill= var1)) +
geom_dotplot(binaxis='y', stackdir='center', dotsize=1, binwidth = 1/30)
}
my.function(df, 'Type', 'Read')
我的问题
my.function <-
function(df, var1, var2) {
stat.test <- df %>%
t_test(var2 ~ var1, paired = FALSE)
ggplot(df, aes_string(x = var1, y = var2)) +
geom_boxplot(aes_string(fill= var1)) +
geom_dotplot(binaxis='y', stackdir='center', dotsize=1, binwidth = 1/30) +
stat_pvalue_manual(stat.test, label = "p", y.position = 2.1)
}
my.function(df, 'Type', 'Read')
上面的 returns 是一个错误,因为 rstatix 认为 var1
和 var2
是示例数据框中的列。
我尝试了以下方法让 R 停止该行为,但两次尝试都失败了。
尝试 1
my.function <-
function(df, var1, var2) {
stat.test <- df %>%
t_test(eval(parse(var2)) ~ eval(parse(var1)), paired = FALSE)
ggplot(df, aes_string(x = var1, y = var2)) +
geom_boxplot(aes_string(fill= var1)) +
geom_dotplot(binaxis='y', stackdir='center', dotsize=1, binwidth = 1/30) +
stat_pvalue_manual(stat.test, label = "p", y.position = 2.1)
}
my.function(df, 'Type', 'Read')
尝试 2
my.function <-
function(df, var1, var2) {
stat.test <- df %>%
t_test(eval(as.name(paste(var2))) ~ eval(as.name(paste(var1))), paired = FALSE)
ggplot(df, aes_string(x = var1, y = var2)) +
geom_boxplot(aes_string(fill= var1)) +
geom_dotplot(binaxis='y', stackdir='center', dotsize=1, binwidth = 1/30) +
stat_pvalue_manual(stat.test, label = "p", y.position = 2.1)
}
my.function(df, 'Type', 'Read')
我进入了 t_test 函数,看看是否有任何迹象表明为什么我尝试将此自定义函数添加到 运行 会失败。我怀疑这个问题与 R 处理公式和函数的方式有关。在对我的原始脚本进行了一些操作之后,我终于让它工作了。
my.function <-
function(df, var1, var2) {
stat.test <- df %>%
t_test(as.formula(paste(var2, '~', var1)), paired = FALSE)
ggplot(df, aes_string(x = var1, y = var2)) +
geom_boxplot(aes_string(fill= var1)) +
geom_dotplot(binaxis='y', stackdir='center', dotsize=1, binwidth = 1/30) +
stat_pvalue_manual(stat.test, label = "p", y.position = 2.1)
}
my.function(df, 'Type', 'Read')