有没有更好的方法来实现以下代码:
slice.periods <- function (x, periods, ...)
{
if (!require("xts")) {
stop("Need 'xts'")
}
Reduce(rbind.xts, lapply(periods, function(t) x[t], ...))
}
Run Code Online (Sandbox Code Playgroud)
其中 x 是一个 xts 对象,periods 是一个可通过 xts 子集识别的可迭代宪章列表。示例用法:
j <- xts(rnorm(10e6),Sys.time()-(10e6:1))
v <- c("T10:00/T11:00", "T13:00/T15:00", "T20:30/T22:00")
system.time(slice.periods(j, v))
## result on my MacBook Air (1.8 GHz Intel Core i7; 4 GB 1333 MHz DDR3)
## user system elapsed
## 14.956 0.876 15.837
Run Code Online (Sandbox Code Playgroud)
有几个顾虑:
我看到一些帖子说,如果时间是 UTC,直接访问会有一些惊人的加速,请参阅以下帖子: data.table 时间子集 vs xts 时间子集
但是,我的应用程序需要使用夏令时的本地时区。这使得夏季和冬季之间的 UTC 小时转换不同,上述方法将不起作用。
我还考虑使用 data.table,因为我使用“rbindlist”替换 do.Call(rbind, …