dplyr sumrize () и summarise_each () делают дополнительные вызовы предоставляемых функций

Кажется, чтоsummarise а такжеsummarise_each совершают ненужные дополнительные вызовы для функций обратного вызова, которые им предоставляются. Предположим, что у нас есть следующее

X <- data.frame( Group = rep(c("G1","G2"),2:3), Var1 = 1:5, Var2 = 11:15 )

который выглядит так:

   Group Var1 Var2
 1    G1    1   11
 2    G1    2   12
 3    G2    3   13
 4    G2    4   14
 5    G2    5   15

Далее предположим, что у нас есть (потенциально дорогая) функция

f <- function(v)
{
   cat( "Calling f with vector", v, "\n" )
   ## ...additional bookkeeping and processing...
   mean(v)
}

что мы хотели бы применить к каждой из наших переменных в каждой группе. С помощьюdplyrмы могли бы сделать это следующим образом:

X %>% group_by( Group ) %>% summarise_each( funs(f) )

Тем не менее, выход показывает, чтоf был вызван один раз для каждой переменной в 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

Та же проблема присутствует при использованииsummarize:

> 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

Почему это происходит и как можно предотвратитьsummarise а такжеsummarise_each делать дополнительные звонки?

(Это используетR версия 3.3.0 иdplyr версия 0.5.0)

РЕДАКТИРОВАТЬ: Похоже, что проблема связана с взаимодействием междуgroup_by а такжеsummarise/summarise_each, Без группировки дополнительные звонки не выполняются. Также,mutate а такжеmutate_each не страдают от этого вопроса. (Кредит:Eddi а такжеeipi10 за эти выводы)

Ответы на вопрос(1)

Ваш ответ на вопрос