2013-08-21 28 views
6

Bir vektör veya zaman listesi için, bir dize saatinden gitmek istiyorum, ör. 12:34:56.789, gece yarısından milisaniye olarak 45296789'a eşit olacaktır.Dize saatinden milisaniye hızlı dönüşüm

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

ve daha hızlı yapmak istiyorum:

Şu ana şey bu.

İşte kıyaslama için belirlenen bir örnek verilerinizdir:

times = rep('12:34:56.789', 1e6) 

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

cevap

5

daha hızlı bir büyüklük sırasına olmakta yarar var fasttime paketini kullanabilirsiniz.

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