Поскольку вы упомянули fasttime
, мне стало любопытно проверить его на нескольких других распространенных опциях.Для этого требуются даты в формате год-месяц-день, но вы можете сделать это с помощью некоторого регулярного выражения.
Я провел тестирование производительности для небольшого, но все же громоздкого набора дат.Я работаю на MacBook Pro годовалого возраста с множеством других вещей и все еще делаю 100 испытаний на 1 миллион дат со всеми тремя методами, которые были закончены до того, как я съел бутерброд.
set.seed(9)
days <- sample(1:30, 1e6, replace = TRUE)
date_str <- sprintf("09/%02d/2019", days)
# as.Date(date_str, format = "%m/%d/%Y")
# lubridate::mdy(date_str)
# fasttime::fastPOSIXct(gsub("^(\\d{2})/(\\d{2})/(\\d{4})", "\\3-\\1-\\2", date_str))
bench <- microbenchmark::microbenchmark(
list = list(
base = as.Date(date_str, format = "%m/%d/%Y"),
lubr = lubridate::mdy(date_str),
fast = fasttime::fastPOSIXct(gsub("^(\\d{2})/(\\d{2})/(\\d{4})", "\\3-\\1-\\2", date_str))
)
)
bench
#> Unit: nanoseconds
#> expr min lq mean median uq max neval cld
#> base 3 5 7.02 5 6 180 100 a
#> lubr 4 5 6.91 6 6 148 100 a
#> fast 4 5 8.77 5 6 332 100 a
На основев среднем и наименьшем максимуме lubridate::mdy
выполняется быстрее всего без необходимости переформатирования или указания строки формата.Исходя из медианы, база as.Date
работает быстрее всего, но требует настройки строки форматирования (не имеет значения) или fasttime
, но с условием регулярного выражения.Сделайте из этого то, что вы захотите.
Я бы также отметил, что fasttime
конвертируется в POSIX, поэтому, так как нет элемента времени, который он устанавливает, его удаление может затем стать другим трудоемким процессом.шаг.