I am running a for loop with matrices. One line does not work properly:
K[1:2,i] * FF[i] %*% K1[i,1:2]
K is a 2 by n matrix, where i updates in the for loop. FF is an array(1:n) and K1 is the transpose of K. Taken out of the for loop, with the initial values:
n <- 100
K <- matrix(c(2,1), nrow=2, ncol=n)
K1 = t(K)
FF <- array(1:n)
FF[1] <- 10^7
K[1:2,1] * FF[1] %*% K1[1,1:2]
the result that R gives me is a 1 * 2 matrix. It should be a 2 * 2 matrix.
I have tried to exclude FF, but also then the matrix dimensions are not correct.
Thanks for helping!
CodePudding user response:
You have 2 problems. One is that R eagerly converts single-column matrices to vectors, so K[1:2,1] is interpreted as a vector, not a matrix. We can fix this with the drop = FALSE argument to [.
There's also an order-of-operations problem, %*% has higher precedence than *, so we need parentheses to make the * happen first:
(K[1:2, 1, drop = F] * FF[1]) %*% K1[1, 1:2]
# [,1] [,2]
# [1,] 4e 07 2e 07
# [2,] 2e 07 1e 07
Unrelated to your problem, but it seems strange to make FF an array, seems like a length-100 vector would be simpler.
