Leo96
Leo96

Reputation: 499

Using two for loops to fill one empty matrix by rows

I'm trying to do a forecast analysis with some error measures. My question relates more to a technical Problem. Here is a short example: Im studying error measures regarding to the forecast length (h) and the k-step-forecast. I want to compare forecast lengths of 12, 18 and 24 months.

h<-c(12,18,24)

And for that lengths I'm comparing the 1-12 step ahead forecasts.

k <- c(1:12)

I've written two functions: The first one (foo) is computing the hole code and the second one (forecast_analysis) is doing my 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)
}

my Problem is, that I couldnt find a way to fill the Matrix by rows like this:

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

So, first I want to fill the Matrix for a fixed value of h for all values of k. And then repeating this for all values of h. I hope ure understanding my Problem.

I know that apply functions would be more efficient here. But I'm not yet able to do so.

Upvotes: 0

Views: 78

Answers (1)

Thomas Mailund
Thomas Mailund

Reputation: 1826

You can build a table of all h x k combinations plus a result using expand.grid.

This code should get you started

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

If you return more than one value from your function, you need to assign to more than one column in combinations[row,...], but otherwise it should work.

Update

To handle a function that returns more than one value, do something like this:

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

Upvotes: 1

Related Questions