2017-06-28 23 views
6

Teraz by_row() w Purrr będzie amortyzowane, co jest nowa realizacja preferowanym tidyverse od (jest?):Odpowiednik rowwise() do() z purrr, teraz gdy by_row() jest amortyzowany?

somedata = expand.grid(a=1:3,b=3,c=runif(3)) 
somedata %>% 
    rowwise() %>% do(binom.test(x=.$a,n=.$b,p=.$c) %>% tidy()) 

Wydaje się jakby to polubisz gniazdo każdy wiersz w jednej kolumnie, a następnie użyj map(), ale nie jestem pewien, jak wykonać tę operację zagnieżdżania ... i wydaje się, że to trochę niejasne. Czy istnieje lepszy sposób?

Odpowiedz

5

Oto jeden sposób z 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 

lub tylko tidyverse funkcji

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 
+0

Czy wywołanie funkcji w pmap pozwalają przekazywać argumenty? Na przykład, jeśli zamiast tego chcesz, aby argument "p" w binom.test był "c-0.5", chciałbym zrobić coś takiego jak pmap (binom.test (p = .z-0.5)), ale to oczywiście robi nie działa. Czy istnieje odpowiednik? –

+0

@NicholasRoot Domyślam się, że potrzebujesz 'pmap (~ binom.test (., P = z -0.5))' – akrun

+1

Zauważ, że możesz uniknąć 'unname' jeśli użyjesz nazw kolumn w' somedata', które pasują do argumentów funkcja ("binom.test" w tym przypadku). Byłoby to bardziej jednoznaczne, a więc prawdopodobnie bezpieczniejsze. – cboettig

Powiązane problemy