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 за эти выводы)