我不完全理解预期的结果,但这可能是答案的起点。map()
from purrr
uses .x
在公式论证中。
这是完成我认为您正在尝试做的事情的一种方法purrr
.
mtcars %>%
split(as.character(.$cyl)) %>%
map(~t.test(.x$mpg))
But, purrr::by_slice()
搭配得很好dplyr::group_by()
.
library(purrr)
library(dplyr)
mtcars %>%
dplyr::select(cyl, mpg) %>%
group_by(as.character(cyl)) %>%
by_slice(~ t.test(.x$mpg))
或者,你可以跳过purrr
完全使用dplyr:::summarise()
.
library(purrr)
library(dplyr)
mtcars %>%
dplyr::select(cyl, mpg) %>%
group_by(as.character(cyl)) %>%
summarise(t_test = data_frame(t.test(.$mpg)))
如果嵌套data.frame
令人困惑,broom
可以帮助我们轻松获得data.frame
结果摘要。
purrr
+ broom
+ tidyr
library(broom)
library(tidyr)
mtcars %>%
group_by(as.character(cyl)) %>%
by_slice(~tidy(t.test(.x$mpg))) %>%
unnest()
dplyr
+ broom
library(broom)
mtcars %>%
dplyr::select(cyl, mpg) %>%
group_by(as.character(cyl)) %>%
do(tidy(t.test(.$mpg)))
编辑以包括对评论的回复
有了管道,我们很快就会忘乎所以。我认为沃尔特的回答做得很好,但我想确保我提供了一个purrr
-ty 答案。我希望使用pipeR
并不过分混乱。
library(purrr)
library(dplyr)
library(broom)
library(tidyr)
library(pipeR)
mtcars %>>%
(split(.,.$cyl)) %>>%
(split_cyl~
names(split_cyl) %>>%
(
cross_d(
list(against=.,tested=.),
.filter = `==`
)
) %>>%
by_row(
~tidy(t.test(split_cyl[[.x$tested]]$mpg,split_cyl[[.x$against]]$mpg))
)
) %>>%
unnest()