Изменяет ли мутирование tbl по ссылке?
Что мне действительно нравится вdata.table
это:=
идиома для изменения таблицы по ссылке, без необходимости дорогостоящих копий. Насколько я понимаю, это один из аспектов, который делаетdata.table
такой сверхбыстрый по сравнению с другими методами.
Теперь я начал играть сdplyr
пакет, который кажется одинаково производительным. Но так как результаты все еще должны быть назначены с использованием<-
Оператор, я ожидал снижения производительности на этом уровне. Тем не менее, кажется, нет ни одного.
В качестве примера:
library(dplyr)
library(Lahman)
library(microbenchmark)
library(ggplot2)
df <- Batting[ c("yearID", "teamID", "G_batting") ]
mb <- microbenchmark(
dplyr = {
tb <- tbl_df( df )
tb <- tb %.%
group_by( yearID, teamID ) %.%
mutate( G_batting = max(G_batting) )
},
data.table = {
dt <- as.data.table( df )
dt[ , G_batting := max(G_batting), by = list( yearID, teamID ) ]
},
times = 500
)
qplot( data = mb, x = expr, y = time * 1E-6, geom = "boxplot", ylab="time [ms]", xlab = "approach" )
Мне просто интересно, как это возможно? Или есть концептуальная ошибка в моем тесте? Мое понимание<-
неправильно?