rowwise() do() 与 purrr 的等价物,既然 by_row() 已被弃用?
Equivalent of rowwise() do() with purrr, now that by_row() is deprecated?
现在 purrr 中的 by_row() 将被(是?)弃用,什么是新的首选 tidyverse 实现:
somedata = expand.grid(a=1:3,b=3,c=runif(3))
somedata %>%
rowwise() %>% do(binom.test(x=.$a,n=.$b,p=.$c) %>% tidy())
似乎您可以将每一行嵌套到一个列中,然后使用 map(),但我不确定如何进行嵌套操作...而且这似乎有点晦涩难懂。有没有更好的方法?
这是 map
的一种方式
library(tidyverse)
library(broom)
do.call(Map, c(f = binom.test, unname(somedata))) %>%
map_df(tidy)
# estimate statistic p.value parameter conf.low conf.high method alternative
#1 0.3333333 1 1.00000000 3 0.008403759 0.9057007 Exact binomial test two.sided
#2 0.6666667 2 0.25392200 3 0.094299324 0.9915962 Exact binomial test two.sided
#3 1.0000000 3 0.03571472 3 0.292401774 1.0000000 Exact binomial test two.sided
#4 0.3333333 1 0.14190440 3 0.008403759 0.9057007 Exact binomial test two.sided
#5 0.6666667 2 0.55583967 3 0.094299324 0.9915962 Exact binomial test two.sided
#6 1.0000000 3 1.00000000 3 0.292401774 1.0000000 Exact binomial test two.sided
#7 0.3333333 1 0.58810045 3 0.008403759 0.9057007 Exact binomial test two.sided
#8 0.6666667 2 1.00000000 3 0.094299324 0.9915962 Exact binomial test two.sided
#9 1.0000000 3 0.25948735 3 0.292401774 1.0000000 Exact binomial test two.sided
或只有 tidyverse
个函数
somedata %>%
unname %>%
pmap(binom.test) %>%
map_df(tidy)
#estimate statistic p.value parameter conf.low conf.high method alternative
#1 0.3333333 1 1.00000000 3 0.008403759 0.9057007 Exact binomial test two.sided
#2 0.6666667 2 0.25392200 3 0.094299324 0.9915962 Exact binomial test two.sided
#3 1.0000000 3 0.03571472 3 0.292401774 1.0000000 Exact binomial test two.sided
#4 0.3333333 1 0.14190440 3 0.008403759 0.9057007 Exact binomial test two.sided
#5 0.6666667 2 0.55583967 3 0.094299324 0.9915962 Exact binomial test two.sided
#6 1.0000000 3 1.00000000 3 0.292401774 1.0000000 Exact binomial test two.sided
#7 0.3333333 1 0.58810045 3 0.008403759 0.9057007 Exact binomial test two.sided
#8 0.6666667 2 1.00000000 3 0.094299324 0.9915962 Exact binomial test two.sided
#9 1.0000000 3 0.25948735 3 0.292401774 1.0000000 Exact binomial test two.sided
现在 purrr 中的 by_row() 将被(是?)弃用,什么是新的首选 tidyverse 实现:
somedata = expand.grid(a=1:3,b=3,c=runif(3))
somedata %>%
rowwise() %>% do(binom.test(x=.$a,n=.$b,p=.$c) %>% tidy())
似乎您可以将每一行嵌套到一个列中,然后使用 map(),但我不确定如何进行嵌套操作...而且这似乎有点晦涩难懂。有没有更好的方法?
这是 map
library(tidyverse)
library(broom)
do.call(Map, c(f = binom.test, unname(somedata))) %>%
map_df(tidy)
# estimate statistic p.value parameter conf.low conf.high method alternative
#1 0.3333333 1 1.00000000 3 0.008403759 0.9057007 Exact binomial test two.sided
#2 0.6666667 2 0.25392200 3 0.094299324 0.9915962 Exact binomial test two.sided
#3 1.0000000 3 0.03571472 3 0.292401774 1.0000000 Exact binomial test two.sided
#4 0.3333333 1 0.14190440 3 0.008403759 0.9057007 Exact binomial test two.sided
#5 0.6666667 2 0.55583967 3 0.094299324 0.9915962 Exact binomial test two.sided
#6 1.0000000 3 1.00000000 3 0.292401774 1.0000000 Exact binomial test two.sided
#7 0.3333333 1 0.58810045 3 0.008403759 0.9057007 Exact binomial test two.sided
#8 0.6666667 2 1.00000000 3 0.094299324 0.9915962 Exact binomial test two.sided
#9 1.0000000 3 0.25948735 3 0.292401774 1.0000000 Exact binomial test two.sided
或只有 tidyverse
个函数
somedata %>%
unname %>%
pmap(binom.test) %>%
map_df(tidy)
#estimate statistic p.value parameter conf.low conf.high method alternative
#1 0.3333333 1 1.00000000 3 0.008403759 0.9057007 Exact binomial test two.sided
#2 0.6666667 2 0.25392200 3 0.094299324 0.9915962 Exact binomial test two.sided
#3 1.0000000 3 0.03571472 3 0.292401774 1.0000000 Exact binomial test two.sided
#4 0.3333333 1 0.14190440 3 0.008403759 0.9057007 Exact binomial test two.sided
#5 0.6666667 2 0.55583967 3 0.094299324 0.9915962 Exact binomial test two.sided
#6 1.0000000 3 1.00000000 3 0.292401774 1.0000000 Exact binomial test two.sided
#7 0.3333333 1 0.58810045 3 0.008403759 0.9057007 Exact binomial test two.sided
#8 0.6666667 2 1.00000000 3 0.094299324 0.9915962 Exact binomial test two.sided
#9 1.0000000 3 0.25948735 3 0.292401774 1.0000000 Exact binomial test two.sided