Вы можете легко сделать это без каких-либо циклов, если превратите свой список матриц в трехмерный массив.
library(abind)
a1 <- do.call(abind, c(a, list(along = 3)))
#, , 1
#
# [,1] [,2] [,3]
#[1,] 1 4 7
#[2,] 2 5 8
#[3,] 3 6 9
#
#, , 2
#
# [,1] [,2] [,3]
#[1,] 0.9793649 0.08094869 0.2668127
#[2,] 1.4831377 1.50722214 0.1104620
#[3,] 0.4776337 6.75746241 0.1140135
#permute first and third dimension before and after multiplication
aperm(aperm(a1, c(3, 2, 1)) * b, c(3, 2, 1))
# , , 1
#
# [,1] [,2] [,3]
# [1,] 0.5 2.0 3.5
# [2,] 1.0 2.5 4.0
# [3,] 1.5 3.0 4.5
#
# , , 2
#
# [,1] [,2] [,3]
# [1,] 1.4690473 0.121423 0.4002191
# [2,] 2.2247065 2.260833 0.1656930
# [3,] 0.7164505 10.136194 0.1710202