2017-09-23 3 views
1

J'essaie d'obtenir purrr::pmap de travailler sur une formule et il me manque quelque chose d'évident.pmap travaillant sur la formule

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

Ceci est juste un conteneur, où je vais garder une trace des données séparées cadres

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 
) 

Maintenant, je veux la carte sur ces trois listes

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

renvoie cette erreur :

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

Répondre

1

Utilisez plyr::mutate intérieur 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) 
) 

La sortie est:

[[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

wow - 'plyr :: oeuvres mutate' mais 'dplyr :: mutate' échoue. fou. – tomw