是否有可能t.test从piping运营商运营?
我试图找到答案,但围绕这个主题的大多数问题都是针对同一数据集进行多次测试.
我看了一个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)
)
Run Code Online (Sandbox Code Playgroud)
如果我运行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
Run Code Online (Sandbox Code Playgroud)
但如果我尝试使用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
Run Code Online (Sandbox Code Playgroud)
我需要做一些额外的操作吗?
akr*_*run 12
我们可以在里面把它summarise作为一个list
d %>%
summarise(ttest = list(t.test(amount ~ group, var.equal = TRUE)))
Run Code Online (Sandbox Code Playgroud)
如果我们只需要提取p值,就可以完成
d %>%
summarise(pval = t.test(amount ~ group, var.equal = TRUE)$p.value)
Run Code Online (Sandbox Code Playgroud)
或者我们可以把它放在里面{},然后做t.test
d %>%
{t.test(.$amount ~ .$group, var.equal = TRUE)}
Run Code Online (Sandbox Code Playgroud)
或者通过指定data公式方法而没有大括号
d %>%
t.test(amount ~ group, data = ., var.equal = TRUE)
Run Code Online (Sandbox Code Playgroud)
编辑:根据@ hpesoj626的评论