2017-09-23 10 views
1

私はpurrr::pmapを数式に適用しようとしています。pmap working on formula

library(plyr) 
library(tidyverse) 
library(broom) 

これは私が独立したデータフレームを追跡するだろうただの容器、

d1 <- expand.grid(vs = c(0, 1), 
        am = c(0, 1)) 

d1$mods <- 1:4 %>% 
    map(function(i) 

lm(mpg ~ wt, 
    data = mtcars %>% 
    filter(vs == d1$vs[[i]], 
      am == d1$am[[i]] 
      ) 
    ) %>% 
    tidy 
) 

今、私はこれらの3つのリスト

pmap(
    list(
    d1$vs, 
    d1$am, 
    d1$mods 
), 
~..3 %>% 
mutate(vs = ..1, 
     am = ..2) 
) 

戻っ上で、このエラーをマップしたいです:

Error in mutate_impl(.data, dots) : Binding not found: ..1. 

答えて

1

012を使用してくださいpmap内側:

library(broom) 
library(tidyverse) 

d1 <- expand.grid(vs = c(0, 1), am = c(0, 1)) 

d1$mods <- 1:4 %>% 
    map(function(i) 

lm(mpg ~ wt, 
    data = mtcars %>% 
    filter(vs == d1$vs[[i]], 
      am == d1$am[[i]] 
      ) 
    ) %>% 
    tidy 
) 

pmap(
list(d1$vs, d1$am, d1$mods), 
~..3 %>% 
plyr::mutate(vs = ..1, am = ..2) 
) 

出力は次のようになります。

[[1]] 
     term estimate std.error statistic  p.value vs am 
1 (Intercept) 25.059424 3.5111642 7.137070 3.152928e-05 0 0 
2   wt -2.438894 0.8421098 -2.896171 1.593780e-02 0 0 

[[2]] 
     term estimate std.error statistic p.value vs am 
1 (Intercept) 31.527152 8.976986 3.511998 0.01706422 1 0 
2   wt -3.376121 2.796159 -1.207414 0.28126767 1 0 

[[3]] 
     term estimate std.error statistic  p.value vs am 
1 (Intercept) 42.36357 3.300961 12.833707 0.0002125032 0 1 
2   wt -7.91376 1.141476 -6.932921 0.0022726287 0 1 

[[4]] 
     term estimate std.error statistic  p.value vs am 
1 (Intercept) 44.126436 6.956785 6.342935 0.001437588 1 1 
2   wt -7.767647 3.362709 -2.309937 0.068912660 1 1 
+0

すごい - 'plyr :: mutate'動作しますが、 'dplyr :: mutate'は失敗します。クレイジー。 – tomw