R - 运行 来自管道操作员的 t 检验
R - Running a t-test from piping operators
是否有可能 运行 来自 piping
个运算符的 t.test
?
我试图找到这个问题的答案,但围绕该主题的大多数问题都着眼于对同一数据集进行多次测试。
我看了一个broom
包,不过好像对读取结果还是有好处的。
我感兴趣的是是否可以只在输出中使用 piping
和 运行 和 t.test()
。
例如,这里有一些样本数据
library(dplyr)
d <- data.frame(
group = sample(LETTERS[1:2], size = 10, replace = T),
amount = sample(1:3, size = 10, replace = T)
)
如果我运行一个t.test
使用base R
,我得到的结果是:
t.test(d$amount~d$group, var.equal = T)
> d
group amount
1 A 2
2 A 2
3 B 1
4 B 3
5 A 2
6 B 1
7 B 2
8 A 1
9 B 3
10 A 3
但是如果我尝试使用 piping
,我会得到错误:
d %>% t.test(amount~group, var.equal = T)
Error: is.atomic(x) is not TRUE
In addition: Warning messages:
1: In is.na(y) :
is.na() applied to non-(list or vector) of type 'language'
2: In mean.default(x) : argument is not numeric or logical: returning NA
3: In var(x) : NAs introduced by coercion
4: In mean.default(y) : argument is not numeric or logical: returning NA
我需要做一些额外的操作吗?
我们可以将它作为 list
放在 summarise
中
d %>%
summarise(ttest = list(t.test(amount ~ group, var.equal = TRUE)))
如果我们只需要提取 pvalue,就可以做到
d %>%
summarise(pval = t.test(amount ~ group, var.equal = TRUE)$p.value)
或者我们可以将它放在 {}
中,然后执行 t.test
d %>%
{t.test(.$amount ~ .$group, var.equal = TRUE)}
或不带大括号,通过为公式方法指定 data
d %>%
t.test(amount ~ group, data = ., var.equal = TRUE)
编辑:基于@hpesoj626 的评论
'rstatix' 一个包正好处理在管道内执行基本统计测试
https://cran.r-project.org/web/packages/rstatix/rstatix.pdf
rstatix 提供函数包装器,例如 t.test() 或 cohensD(),从而可以将它们与管道运算符一起使用。根据需要执行 t 检验只需使用 t.test()、t_test():
的包装器即可
d %>% t_test(amount ~ group, var.equal = T)
是否有可能 运行 来自 piping
个运算符的 t.test
?
我试图找到这个问题的答案,但围绕该主题的大多数问题都着眼于对同一数据集进行多次测试。
我看了一个broom
包,不过好像对读取结果还是有好处的。
我感兴趣的是是否可以只在输出中使用 piping
和 运行 和 t.test()
。
例如,这里有一些样本数据
library(dplyr)
d <- data.frame(
group = sample(LETTERS[1:2], size = 10, replace = T),
amount = sample(1:3, size = 10, replace = T)
)
如果我运行一个t.test
使用base R
,我得到的结果是:
t.test(d$amount~d$group, var.equal = T)
> d
group amount
1 A 2
2 A 2
3 B 1
4 B 3
5 A 2
6 B 1
7 B 2
8 A 1
9 B 3
10 A 3
但是如果我尝试使用 piping
,我会得到错误:
d %>% t.test(amount~group, var.equal = T)
Error: is.atomic(x) is not TRUE
In addition: Warning messages:
1: In is.na(y) :
is.na() applied to non-(list or vector) of type 'language'
2: In mean.default(x) : argument is not numeric or logical: returning NA
3: In var(x) : NAs introduced by coercion
4: In mean.default(y) : argument is not numeric or logical: returning NA
我需要做一些额外的操作吗?
我们可以将它作为 list
summarise
中
d %>%
summarise(ttest = list(t.test(amount ~ group, var.equal = TRUE)))
如果我们只需要提取 pvalue,就可以做到
d %>%
summarise(pval = t.test(amount ~ group, var.equal = TRUE)$p.value)
或者我们可以将它放在 {}
中,然后执行 t.test
d %>%
{t.test(.$amount ~ .$group, var.equal = TRUE)}
或不带大括号,通过为公式方法指定 data
d %>%
t.test(amount ~ group, data = ., var.equal = TRUE)
编辑:基于@hpesoj626 的评论
'rstatix' 一个包正好处理在管道内执行基本统计测试
https://cran.r-project.org/web/packages/rstatix/rstatix.pdf
rstatix 提供函数包装器,例如 t.test() 或 cohensD(),从而可以将它们与管道运算符一起使用。根据需要执行 t 检验只需使用 t.test()、t_test():
的包装器即可d %>% t_test(amount ~ group, var.equal = T)