为所有可能的时间序列类创建函数方法

时间:2013-07-10 11:32:54

标签: r time-series finance

这是一个问题,可以从这个(R: Recreate historical membership from a list of changes in membership)问题继续。

那里讨论的问题实际上源于对金融普遍感兴趣的问题,其中我们通常拥有指数的成员股,然后是指数成员资格的变化。我们通常希望重新创建此成员资格,手头的数据是当前成员资格以及更改的日期。

但是,典型的问题是为常规时间序列(例如每日,每周等)生成此成员资格,而更改本身就是一个不规则的时间序列。

上述链接问题中建议的方法可以这种方式使用:

  1. 在所有已知的更改时间查找成员资格。
  2. 以所需频率创建一个有利时间类的序列。
  3. 使用上次已知的成员资格更改,在序列中每次复制成员资格。
  4. 我想编写recreate.memship函数的函数方法,它可以为R中任何时间序列类中给出的indx做正确的事。我能想到的一种方法是定义每个已知类的方法,例如tsDatezooxts,......存在seq方法。

    这个冗长的讨论之后的问题是双重的:

    1. 是否有一种智能的方法来定义方法,这样我就不必为每个已知的时间类编写新方法。 (解释一下,比我更聪明的程序员如何设计这个?)
    2. 是否有针对此问题/类问题的已知解决方案?

1 个答案:

答案 0 :(得分:2)

xts已经允许这样做了。请查看package vignette的第4部分。

基本上,您在功能开头调用try.xts,在结尾调用reclass。我在TTR包中使用这个范例。例如:

R> momentum
function (x, n = 1, na.pad = TRUE) 
{
    x <- try.xts(x, error = as.matrix)
    if (is.xts(x)) {
        mom <- diff(x, n, na.pad = na.pad)
    }
    else {
        NAs <- NULL
        if (na.pad) {
            NAs <- rep(NA, n)
        }
        mom <- c(NAs, diff(x, n))
    }
    reclass(mom, x)
}
<environment: namespace:TTR>