Быстрое преобразование из строкового времени в миллисекунды

Для вектора или списка раз я хотел бы перейти от строкового времени, например. 12:34:56.789 до миллисекунды с полуночи, которая будет равна 45296789.

Вот что я делаю сейчас:

toms = function(time) {
 sapply(strsplit(time, ':', fixed = T),
 function(x) sum(as.numeric(x)*c(3600000,60000,1000)))
}

и хотел бы сделать это быстрее.

Здесь приведен пример набора данных для сравнения:

times = rep('12:34:56.789', 1**)
system.time(toms(times))
# user system elapsed 
# 9.00 0.04 9.05
1 ответ

Вы можете использовать пакет быстрого времени, который, кажется, примерно на порядок быстрее.

library(fasttime)
fasttoms <- function(time) {
 1000*unclass(fastPOSIXct(paste("1970-01-01",time)))
}
times <- rep('12:34:56.789', 1**)
system.time(toms(times))
# user system elapsed 
# 6.61 0.03 6.68 
system.time(fasttoms(times))
# user system elapsed 
# 0.53 0.00 0.53
identical(fasttoms(times),toms(times))
# [1] TRUE

licensed under cc by-sa 3.0 with attribution.