【问题标题】:Loop over time-series object in R在R中循环时间序列对象
【发布时间】:2016-07-16 11:21:57
【问题描述】:

我有一个时间序列对象:

 seq <- seq(as.POSIXct("2015-09-01"),as.POSIXct("2015-09-02"), by = "120 mins")
 ob <- xts(rnorm(length(seq)),seq) # xts object

ob 的一个重要特性是它可以实时更新,即使用rbind 将新的观察结果附加到它上面。因此,我不知道这个物体的确切长度。现在,我想逐行读取ob 并执行我需要的操作。假设我将读取ob 的行,然后将此行添加到另一个静态时间序列(xts)对象。我应该如何逐行阅读ob?到现在为止,我把它当作

  i <- 1
  l <- ob[i,]
  while(NROW(l)) # Check I have a row to read
  {   
      print(l) # dummy operation
      i <- i+1
      l <- ob[i,] 
  }

这段代码完成了它的工作,但它导致了错误

Error in `[.xts`(ob, i, ) : subscript out of bounds

我理解错误。我想知道,有没有更好的方法来逐行读取xts对象?

【问题讨论】:

  • 我会尝试对该操作进行矢量化以避免循环。但是要回答您的问题,我认为您想在每次迭代中使用ob[, 1]length 或更确切地说是nrow(ob) - 因为您当前检查的length 将始终是一个(列),所以不尊重最后一行并尝试读取不定数量的记录。
  • 我明白了你的意思,我已将length 更改为NROW,但仍然没有完全解决问题。
  • 也许只是将你的最后一个任务封装在一个 try() 中?

标签: r time-series xts zoo


【解决方案1】:

这会做你想要的吗?

library(xts)

seq <- seq(as.POSIXct("2015-09-01"),as.POSIXct("2015-09-02"), by = "120 mins")
ob <- xts(rnorm(length(seq)),seq) # xts object

i <- 1
l <- ob[i,]
while(NROW(l))
{
    print(l)
    i <- i+1
    l <- try(ob[i,], silent=TRUE)
    if(class(l)[1]=="try-error") break
}

【讨论】:

    猜你喜欢
    • 2015-05-04
    • 2023-02-22
    • 2021-12-21
    • 2015-04-24
    • 1970-01-01
    • 1970-01-01
    • 2019-02-09
    • 2023-03-16
    • 2020-11-16
    相关资源
    最近更新 更多