r - 用于矩阵运算的 for 循环
问题描述
尝试在 R 中使用“for 循环”。我有一个长度为 44 的向量,从数据文件“data.csv”中读取了 4401 个观察值。
我将其转换为矩阵,以便将每一列作为时间序列数据处理。
我想提取每一列,进行预测,然后为此制作一个矩阵。
最简单的方法是什么?
library(forecast)
data<-read.table(file="data.csv",sep=",",row.names=NULL,header=FALSE)
x <- matrix(1:47, ncol = 1, byrow = FALSE)
for (i in 1:4401)
{
y <- data[i]
y_ts <- ts(y, start=c(2016,1), end=c(2019,8), frequency=12)
AutoArimaModel=auto.arima(y_ts)
forecast=predict(AutoArimaModel, 3)
output <- matrix(forecast$pred, ncol = 1, byrow = FALSE)
ym = data.matrix(y)
z = rbind(ym,output)
x = cbind(x,z)}
它只是运行i = 1
并给我如下错误:
数组(x,c(长度(x),1L)中的错误,如果(!is.null(名称(x)))列表(名称(x),:“数据”必须是向量类型,为“空” '
解决方案
因此,您的代码需要部分重写!
如果我理解,您希望每 44 个时间序列数据获得 3 个预测。我使用了您提供的 .xlsx 数据。
library(forecast)
library(readxl)
data<-read_excel("data.xlsx",col_names = F)
z <- NULL
data <- t(data)
forecast_horizon <- 3
for (i in 1:ncol(data)){
y <- data[,i]
y_ts <- ts(y, start=c(2016,1), end=c(2019,8), frequency=12)
AutoArimaModel <- auto.arima(y_ts)
forecast <- tryCatch(predict(AutoArimaModel, forecast_horizon),
error = function(e) data.frame(pred = rep(NA,forecast_horizon)))
output <- matrix(forecast$pred, ncol = 1, byrow = FALSE)
z = cbind(z,output)
}
注意使用tryCatch
哪个,因为在访问预测时有一个时间序列会产生错误(您可以进一步调查为什么会这样。)
推荐阅读
- sockets - 为什么socket.io需要redis或其他
- javascript - @angular-devkit/build-angular 安装失败,出现 EINTEGRITY 错误
- c - 用空格读取字符串的方法是什么,忽略之前的空格但如果之后有空格则停止?
- javascript - 将相同的值传递给单独的对象的数组
- flutter - 如何在颤动中增加和减少特定产品
- apache-kafka - 如何让 Kafka Connect 均匀地平衡任务/连接器?
- javascript - 我正在使用的包在 Javascript/HTML 中不起作用
- arrays - 如何快速从元组数组中删除特定元组
- python - 网格搜索优化中的错误 -ValueError:无法解释优化器标识符:
- c++ - 了解 Boost.Hana 快速入门