小编lui*_*lui的帖子

从 xts 提高多个时间范围子集的性能?

有没有更好的方法来实现以下代码:

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)

有几个顾虑:

  1. 如果每次子集非常大,“减少”可能太慢
  2. 每个时间片都不是最佳的,因为它不直接使用来自 xts 对象的索引。如果对象很大,则可能会花费大量时间。

我看到一些帖子说,如果时间是 UTC,直接访问会有一些惊人的加速,请参阅以下帖子: data.table 时间子集 vs xts 时间子集

但是,我的应用程序需要使用夏令时的本地时区。这使得夏季和冬季之间的 UTC 小时转换不同,上述方法将不起作用。

我还考虑使用 data.table,因为我使用“rbindlist”替换 do.Call(rbind, …

performance r subset xts data.table

4
推荐指数
1
解决办法
382
查看次数

标签 统计

data.table ×1

performance ×1

r ×1

subset ×1

xts ×1