dplyr summaryize () y summaryise_each () hacen llamadas adicionales a las funciones proporcionadas
Parece quesummarise
ysummarise_each
están haciendo llamadas adicionales innecesarias a las funciones de devolución de llamada que se les proporcionan. Supongamos que tenemos lo siguiente
X <- data.frame( Group = rep(c("G1","G2"),2:3), Var1 = 1:5, Var2 = 11:15 )
que se ve así:
Group Var1 Var2
1 G1 1 11
2 G1 2 12
3 G2 3 13
4 G2 4 14
5 G2 5 15
Supongamos además que tenemos una función (potencialmente costosa)
f <- function(v)
{
cat( "Calling f with vector", v, "\n" )
## ...additional bookkeeping and processing...
mean(v)
}
que nos gustaría aplicar a cada una de nuestras variables en cada grupo. Utilizandodplyr
, podríamos hacerlo de la siguiente manera:
X %>% group_by( Group ) %>% summarise_each( funs(f) )
Sin embargo, el resultado muestra quef
se llamó una vez más para cada variable en G1:
Calling f with vector 1 2
Calling f with vector 1 2
Calling f with vector 3 4 5
Calling f with vector 11 12
Calling f with vector 11 12
Calling f with vector 13 14 15
# A tibble: 2 x 3
Group Var1 Var2
<fctr> <dbl> <dbl>
1 G1 1.5 11.5
2 G2 4.0 14.0
El mismo problema está presente cuando se usasummarize
:
> X %>% group_by( Group ) %>% summarise( test = f(Var1) )
Calling f with vector 1 2
Calling f with vector 1 2
Calling f with vector 3 4 5
# A tibble: 2 × 2
Group test
<fctr> <dbl>
1 G1 1.5
2 G2 4.0
¿Por qué sucede esto y cómo se podría prevenir?summarise
ysummarise_each
de hacer esas llamadas extra?
(Esto está usandoR
versión 3.3.0 ydplyr
versión 0.5.0)
EDITAR: Parece que el problema tiene que ver con la interacción entregroup_by
ysummarise
/summarise_each
. Sin la agrupación, no se realizan llamadas adicionales. También,mutate
ymutate_each
No sufras de este problema. (Crédito:eddi yeipi10 para estos hallazgos)