I want to do something like this:
A = matrix(0, nrow = 3, ncol = 8)
for (ind in list(c(1,2), c(2,3), c(1,6), c(2,7), c(3,8))){
# print(ind)
A[ind] = 1
}
Printing ind gives me what I expect (line 1, 2 then 2,3 and so on), but after running this loop A is:
> A
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
[1,] 1 0 1 0 0 0 0 0
[2,] 1 0 1 0 0 0 0 0
[3,] 1 1 0 0 0 0 0 0
and I have really no idea why.
>Solution :
Another option, same premise.
A <- matrix(0, nrow = 3, ncol = 8)
lst <- list(c(1,2), c(2,3), c(1,6), c(2,7), c(3,8))
A[t(list2DF(lst))] <- 1
A
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
[1,] 0 1 0 0 0 1 0 0
[2,] 0 0 1 0 0 0 1 0
[3,] 0 0 0 0 0 0 0 1
To answer your question of why the loop will not work, you need to transpose the index.
A = matrix(0, nrow = 3, ncol = 8)
for (ind in list(c(1,2), c(2,3), c(1,6), c(2,7), c(3,8))){
# print(ind)
A[t(ind)] = 1
}