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
4

1 に答える 1

5

fasttime パッケージを使用できます。これは、約 1 桁高速であるように思われます。

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
于 2013-08-21T21:02:26.823 に答える