R Ошибка при адресации объекта временного ряда (ts) вместо data.frame - PullRequest
0 голосов
/ 01 марта 2019

Я хочу использовать объект временного ряда (потому что позже я хочу использовать 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 »аргумент не одной длины», тогда как df-объекты не вызывают эту ошибку.Но позже мне понадобится ts () для функции lag ().

Что я могу сделать, чтобы использовать объекты временных рядов внутри функции?

1 Ответ

0 голосов
/ 01 марта 2019

Мы могли бы преобразовать его в zoo, и он имеет with в качестве одного из его methods

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