【发布时间】:2011-01-08 00:04:28
【问题描述】:
我想编写一个时间序列课程。这个想法是我用表达式和其他一些时间序列对象实例化一个对象,例如
(两个时间序列)
x <- ts(rnorm(10), frequency = 4, start = c(1959, 2))
y <- ts(rnorm(10), frequency = 4, start = c(1959, 2))
(时间序列,定义为 x 和 y 之和)
z <- exprTs("x+y", parents=list(x=x, y=y))
(获取该系列的一部分)
window(z, start=1960, end=1960.75)
问题是,我如何评估表达式?我尝试了以下方法:
#(constructor for class)
exprTs <- function(expr, parents) {
res = list(expr=expr, parents=parents)
class(res) <- "exprTs"
res
}
#(window method)
window.exprTs <- function(z, ...) {
eval(substitute(z$expr, lapply(z$parents, window, ...)))
#do.call(z$expr, lapply(z$parents, window, ...))
}
我无法让窗口方法工作。
如果您能指导我如何正确使用替代、eval、do.call,那将非常有帮助。
【问题讨论】:
-
为什么不直接使用已经属于
zoo的rollapply函数呢?这将满足您的需求。 -
是的,也许这过于复杂了。但我想使用 exprTs 对象两次。首先是获取时间序列数据,其次是生成操作树和原始时间序列以用于文档记录。
标签: r time-series