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)