0

I would like to fill an array with different values of prob using a forloop in R. The code I have now:

prob = c(0.05, 0.06, 0.07, 0.08, 0.09)

for (i in prob) {
trans_mat <- array(0, dim = c(3, 3, 5))
trans_mat[1, 2, 1:length(i)] <- i
}

This gives 5 matrixes where only in the first matrix 0.09 is filled in. How do I get 5 matrix where the first one has 0.05, the second one 0.06 and so on for all 5 matrixes?

1
  • you are creating a new object called "trans_mat" each time you run the loop, overwriting the old one. Commented Sep 29, 2022 at 13:11

2 Answers 2

2

You need to create trans_mat first and write into each slice of it:

prob <- c(0.05, 0.06, 0.07, 0.08, 0.09)

trans_mat <- array(0, dim = c(3, 3, 5))

for (i in seq_along(prob)) trans_mat[,,i] <- prob[i]

result:

trans_mat
#> , , 1
#> 
#>      [,1] [,2] [,3]
#> [1,] 0.05 0.05 0.05
#> [2,] 0.05 0.05 0.05
#> [3,] 0.05 0.05 0.05
#> 
#> , , 2
#> 
#>      [,1] [,2] [,3]
#> [1,] 0.06 0.06 0.06
#> [2,] 0.06 0.06 0.06
#> [3,] 0.06 0.06 0.06
#> 
#> , , 3
#> 
#>      [,1] [,2] [,3]
#> [1,] 0.07 0.07 0.07
#> [2,] 0.07 0.07 0.07
#> [3,] 0.07 0.07 0.07
#> 
#> , , 4
#> 
#>      [,1] [,2] [,3]
#> [1,] 0.08 0.08 0.08
#> [2,] 0.08 0.08 0.08
#> [3,] 0.08 0.08 0.08
#> 
#> , , 5
#> 
#>      [,1] [,2] [,3]
#> [1,] 0.09 0.09 0.09
#> [2,] 0.09 0.09 0.09
#> [3,] 0.09 0.09 0.09

EDIT

It's not clear exactly what your expected output is here. If you only want the cell [1, 2] filled in each matrix, with the remainded being blank, your loop would be

for (i in seq_along(prob)) trans_mat[1, 2, i] <- prob[i]

Created on 2022-09-29 with reprex v2.0.2

Sign up to request clarification or add additional context in comments.

Comments

1

You can also do it in one go:

Only the first element of the second column.

trans_mat <- array(0, dim = c(3, 3, 5))
trans_mat[1, 2, ] <- c(0.05, 0.06, 0.07, 0.08, 0.09)
, , 1

     [,1] [,2] [,3]
[1,]    0 0.05    0
[2,]    0 0.00    0
[3,]    0 0.00    0

, , 2

     [,1] [,2] [,3]
[1,]    0 0.06    0
[2,]    0 0.00    0
[3,]    0 0.00    0

, , 3

     [,1] [,2] [,3]
[1,]    0 0.07    0
[2,]    0 0.00    0
[3,]    0 0.00    0

, , 4

     [,1] [,2] [,3]
[1,]    0 0.08    0
[2,]    0 0.00    0
[3,]    0 0.00    0

, , 5

     [,1] [,2] [,3]
[1,]    0 0.09    0
[2,]    0 0.00    0
[3,]    0 0.00    0

The full matrix filled with the same number:

array(rep(c(0.05, 0.06, 0.07, 0.08, 0.09), each = 3*3), dim = c(3, 3, 5))

output

, , 1

     [,1] [,2] [,3]
[1,] 0.05 0.05 0.05
[2,] 0.05 0.05 0.05
[3,] 0.05 0.05 0.05

, , 2

     [,1] [,2] [,3]
[1,] 0.06 0.06 0.06
[2,] 0.06 0.06 0.06
[3,] 0.06 0.06 0.06

, , 3

     [,1] [,2] [,3]
[1,] 0.07 0.07 0.07
[2,] 0.07 0.07 0.07
[3,] 0.07 0.07 0.07

, , 4

     [,1] [,2] [,3]
[1,] 0.08 0.08 0.08
[2,] 0.08 0.08 0.08
[3,] 0.08 0.08 0.08

, , 5

     [,1] [,2] [,3]
[1,] 0.09 0.09 0.09
[2,] 0.09 0.09 0.09
[3,] 0.09 0.09 0.09

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.