R ts(x)中的错误:';ts';对象必须有一个或多个观察值
当我使用R ts(x)中的错误:';ts';对象必须有一个或多个观察值,r,dplyr,forecasting,R,Dplyr,Forecasting,当我使用forecast库进行预测时,我注意到以下代码没有按预期运行: library(forecast) library(dplyr) df1 <- data.frame(gp=gl(20,5), dt=seq(1:100)) get <- function (df1){ ts1 <- ts((df1%>%filter(gp==2))$dt) as.numeric(forecast(ar(ts1),15)$mean) } print(get(df1)
forecast
库进行预测时,我注意到以下代码没有按预期运行:
library(forecast)
library(dplyr)
df1 <- data.frame(gp=gl(20,5), dt=seq(1:100))
get <- function (df1){
ts1 <- ts((df1%>%filter(gp==2))$dt)
as.numeric(forecast(ar(ts1),15)$mean)
}
print(get(df1))
代码也正常运行。我认为这可能是
ar
函数中的一个bug,而问题不知何故与范围有关。对此有何想法?问题在于范围界定<代码>预测()尝试查找用于拟合模型的时间序列。预测包中的函数(如ets
)将此信息存储在模型对象中,因此forecast()
很容易找到它。但是ar()
来自stats包,它不存储用于拟合模型的时间序列。所以forecast()
开始寻找它。如果您在get()
函数之外运行代码,它工作正常,因为forecast()
能够在本地环境中找到ts1
对象。但是在get()
函数中,它会导致错误
一个简单的解决方法是在调用forecast
之前将信息添加到已安装的模型中:
library(forecast)
library(dplyr)
df1 <- data.frame(gp=gl(20,5), dt=seq(1:100))
ts1 <- ts((df1%>%filter(gp==2))$dt)
get <- function (ts1){
fit <- ar(ts1)
fit$x <- ts1
as.numeric(forecast(fit,15)$mean)
}
print(get(ts1))
library(dplyr)
df1 <- data.frame(gp=gl(20,5), dt=seq(1:100))
ts1 <- ts((df1%>%filter(gp==2))$dt)
get <- function (ts1){
fit <- ar(ts1)
as.numeric(predict(fit,n.ahead=15)$pred)
}
print(get(ts1))
library(dplyr)
df1 <- data.frame(gp=gl(20,5), dt=seq(1:100))
ts1 <- ts((df1%>%filter(gp==2))$dt)
get <- function (ts1){
fit <- ar(ts1)
as.numeric(predict(fit,n.ahead=15)$pred)
}
print(get(ts1))