Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R ts(x)中的错误:';ts';对象必须有一个或多个观察值_R_Dplyr_Forecasting - Fatal编程技术网

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))