簡體   English   中英

R在處理時間序列(ts)對象而不是data.frame時出錯

[英]R Error when adressing time series (ts) object instead of data.frame

我想使用時間序列對象(因為稍后要使用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)

不會出現“長度不為1的數字'envir'arg'”錯誤,而df對象不會導致該錯誤。 但是我稍后需要ts()來用於lag()函數。

如何在函數中使用時間序列對象?

我們可以將其轉換為zoo ,它有with它作為一個methods

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM