Je sais qu'en R, si j'ai une liste de matrices, je peux utiliser la fonction Reduce
pour appliquer une opération à toutes les matrices. Par exemple :
l <- list(matrix(rnorm(16), 4, 4), matrix(rnorm(16), 4, 4))
Reduce(`*`, l)
Mais que faire si je veux appliquer cette opération à plusieurs listes ? Je pourrais adopter une approche par force brute avec un fichier for
mais j'ai l'impression qu'il devrait y avoir un meilleur moyen. Je peux faire deux listes avec mapply
l2 <- l
mapply(`*`, l, l2, SIMPLIFY = FALSE)
Mais si j'en ai plus de deux, je ne sais pas comment résoudre ce problème.
Les réflexions suivantes entraînent toutes des erreurs :
l3 <- l2
mapply(`*`, l, l2, l3, SIMPLIFY = FALSE)
Error in .Primitive("*")(dots[[1L]][[1L]], dots[[2L]][[1L]], dots[[3L]][[1L]]) :
operator needs one or two arguments
Reduce(`*`, list(l, l2, l3))
Error in f(init, x[[i]]) : non-numeric argument to binary operator
La sortie souhaitée est une liste de longueur 2 avec les produits par éléments de chaque matrice dans chaque liste. La boucle de force brute ressemblerait à ceci :
out <- vector("list", length = 2)
for(i in 1:2){
out[[i]] <- l[[i]] * l2[[i]] * l3[[i]]
}