R在处理时间序列(ts)对象而不是data.frame时出错

时间:2019-03-01 15:05:44

标签: r function time-series

我想使用时间序列对象(因为以后要使用lag()),但是我无法在函数中处理时间序列对象:

使用data.frame不管我是否编码

dat=data.frame(x=c(1,2,3,4,5,6))
sum(2*dat[,"x"])

[1] 42

或者

with(dat,sum(2*x))

[1] 42

但是,一旦我将data.frame转换为时间序列对象,该函数便不再起作用。

dat=data.frame(x=c(1,2,3,4,5,6))
dat <- ts(dat)
sum(2*dat[,"x"])

[1] 42

所以这仍然有效,但是

with(dat,sum(2*x))

现在导致

Error in eval(substitute(expr), data, enclos = parent.frame()) : 
  numeric 'envir' arg not of length one

或者换句话说: 使用ts对象,我无法使用任何类似的功能

testy <- function(data,par){
  with(data,sum(par * x))
}
sapply(data=dat,2,testy)

没有得到该错误“数字'envir'arg的长度不为1”,而df对象则不会导致该错误。但是稍后需要ts()来实现lag()函数。

如何在函数中使用时间序列对象?

1 个答案:

答案 0 :(得分:0)

我们可以将其转换为zoo,并将with作为其methods之一

library(zoo)
methods(class = 'zoo')
with(zoo(dat), sum(2 * x))
# [1] 42