То, что мне действительно нравится в 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" )
Мне просто интересно, как это возможно? Или есть концептуальная ошибка в том, как я ориентируюсь? Непонятно ли мое понимание <-
?