r错误时,错误的时间序列(TS)对象而不是data.frame



我想使用一个时间序列对象(因为我想稍后使用lag()),但我无法在函数中加热时间序列对象:

使用数据。

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-Object我无法使用任何功能,例如

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

而没有得到该错误"数字'envir'arg而不是长度",而df-objects不会导致该错误。但是我稍后需要ts()forlag()函数。

在函数中使用时间序列对象我该怎么办?

我们可以将其转换为zoo,并且它具有with作为其methods

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

相关内容

最新更新