使用两个for循环按行填充一个空矩阵

时间:2018-03-21 07:25:27

标签: r loops matrix

我尝试使用一些错误措施进行预测分析。我的问题更多地涉及技术问题。 这是一个简短的例子: 我正在研究关于预测长度(h)和k步预测的误差测量。我想比较12,18和24个月的预测长度。

h<-c(12,18,24)

对于这些长度,我比较了提前1-12步预测。

k <- c(1:12)

我写了两个函数: 第一个(foo)计算空洞代码,第二个(forecast_analysis)正在进行我的预测分析。

 foo <- function(series, k, h){

 Outfinal <- matrix(nrow = length(h)*length(k), ncol = 5) 

 for(i in 1:length(h)){
  for(j in 1:length(k)){
    Outfinal[j,] <- forecast_analysis(series,k[j],h[i]) 
  }
 }
return(Outfinal)
}

我的问题是,我无法通过这样的行找到填充Matrix的方法:

h    k         measure 1 measure 2 measure3 measure 4 measure 5
12   1
12   2
12   3
.    .
.    .
.    .
24   10
24   11
24   12

所以,首先我要为所有k值填充矩阵的固定值h。然后对h的所有值重复此操作。我希望能够理解我的问题。

我知道应用函数在这里会更有效率。但我还没有能够这样做。

1 个答案:

答案 0 :(得分:1)

您可以使用expand.grid构建包含所有h x k组合的表格以及结果。

此代码可以帮助您入门

dummy_forecast <- function(h, k) 42
h<-c(12,18,24)
k <- 1:12 # no need for the c function here

combinations <- expand.grid(h = h, k = k, forecast = NA)
for (row in seq_along(combinations$h)) {
    combinations[row, "forecast"] <- 
       with(combinations[row,], dummy_forecast(h, k))
}

如果您从函数中返回多个值,则需要在combinations[row,...]中分配多个列,否则它应该有效。

<强>更新

要处理返回多个值的函数,请执行以下操作:

dummy_forecast <- function(h, k) rep(42, 5)

result <- matrix(nrow = length(h) * length(k), ncol = 7)
combinations <- expand.grid(h = h, k = k)
for (row in seq_along(combinations$h)) {
    result[row,] <- with(combinations[row,], c(h, k, dummy_forecast(h, k)))
}