Я был недоволен временем, когда dplyr и data.table принимали, чтобы создать новую переменную на моем data.frame и решить сравнить методы.Почему переназначение нового имени в dataframe в dplyr делает его быстрее?
К моему удивлению, переназначение результатов dplyr :: mutate() на новый data.frame, кажется, быстрее, чем не делает этого.
Почему это происходит?
library(data.table)
library(tidyverse)
dt <- fread(".... data.csv") #load 200MB datafile
dt1 <- copy(dt)
dt2 <- copy(dt)
dt3 <- copy(dt)
a <- Sys.time()
dt1[, MONTH := month(as.Date(DATE))]
b <- Sys.time(); datatabletook <- b-a
c <- Sys.time()
dt_dplyr <- dt2 %>%
mutate(MONTH = month(as.Date(DATE)))
d <- Sys.time(); dplyr_reassign_took <- d - c
e <- Sys.time()
dt3 %>%
mutate(MONTH = month(as.Date(DATE)))
f <- Sys.time(); dplyrtook <- f - e
datatabletook = 17sec
dplyrtook = 47sec
dplyr_reassign_took = 17sec
'dt1 <- dt' не создает новый объект, называемый' dt1'; он просто делает другой указатель на 'dt'. Попробуйте 'dt1 <- copy (dt)'. – Frank
@Frank - отредактировал вопрос с вашим предложением. Аналогичные результаты. – Dan
Хорошо, интересный/неожиданный результат. Я думаю, было бы полезно иметь его для воспроизводимого примера. – Frank