2013-08-21 9 views
6

Для вектора или списка раз я хотел бы перейти от строкового времени, например. 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', 1e6) 

system.time(toms(times)) 
# user system elapsed 
# 9.00 0.04 9.05 

ответ

5

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

library(fasttime) 
fasttoms <- function(time) { 
    1000*unclass(fastPOSIXct(paste("1970-01-01",time))) 
} 
times <- rep('12:34:56.789', 1e6) 
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 
Смежные вопросы