或者换一种说法:我怎样才能保持我的 ts 索引?
大多数情况下,我在计算中使用时间序列,它不再是 ts 对象。写函数返回ts对象并保留索引信息时应该遵循什么策略?

例如。:

#standard Hodrick Prescott Filter
hpfilter <- function(x,lambda=1600){
eye <- diag(length(x))
result <- solve(eye+lambda*crossprod(diff(eye,lag=1,d=2)),x)

### this is what I am talking about :)
### intuitively i´d maybe add something like this
result <- ts(result,start=start(x),end=end(x),frequency=frequency(x))
###

return(result)
}

但是,我觉得这样既笨拙又笨重。有没有更优雅的方法来做到这一点(也许我应该去上课..)?

最佳答案

对于时间序列,子集化和其他一些函数会导致转换为矩阵或向量。您不必重建时间序列,您只需将原始 ts 的属性转移到结果中即可。

hpfilter <- function(x,lambda=1600){
  eye <- diag(length(x))
  result <-
      solve(eye+lambda*crossprod(diff(eye,lag=1,d=2)),x)

  attributes(result) <- attributes(x)
  return(result)
}

您也可以使用子集来更改(但不附加)时间序列中的值:
hpfilter <- function(x,lambda=1600){
  eye <- diag(length(x))
  x[] <-
    solve(eye+lambda*crossprod(diff(eye,lag=1,d=2)),x)

  return(x)
}

关于r - 我总是丢失 R 中的时间索引——我该怎么办?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5674714/

10-10 09:28