Je cherche à additionner toutes les combinaisons possibles de lignes dans une matrice. Une fonction similaire à la fonction rowSums()
mais au lieu de produire nrow()
sommes, cela produirait nrow()^nrow()
sommes.Comment faire une somme de toutes les combinaisons de lignes dans Matrix?
Par exemple:
set.seed(10)
dummymat <- matrix(floor(runif(9, 0, 2)), nrow = 3, ncol = 3)
produit la matrice:
[,1] [,2] [,3]
[1,] 1 1 0
[2,] 0 0 0
[3,] 0 0 1
Pour trouver toutes les lignes somme possible de la matrice, pourrait écrire le code suivant très inefficace:
allrowsums <- c()
for(i in 1:nrow(dummymat)) {
firstcolval <- dummymat[i,1]
for(j in 1:nrow(dummymat)) {
secondcolval <- dummymat[j,2]
for(k in 1:nrow(dummymat)) {
thirdcolval <- dummymat[k,3]
rowsum <- firstcolval + secondcolval + thirdcolval
allrowsums <- append(allrowsums,rowsum)
}
}
}
Ce qui donne la sortie suivante:
[1] 2 2 3 1 1 2 1 1 2 1 1 2 0 0 1 0 0 1 1 1 2 0 0 1 0 0 1
Quel code plus succinct pourrais-je écrire pour des matrices beaucoup plus grandes?
Merci pour ce @Djork, pouvez-vous penser à la façon de rendre la réponse dynamique, de telle sorte qu'il peut gérer une matrice d'une longueur de la colonne? (Et le code n'a pas besoin d'être ajusté à chaque fois). Pour une matrice de 100 colonnes, le code de cette réponse sera également assez long. –
J'ai modifié la réponse pour répondre à votre question. Si cela fonctionne pour vous s'il vous plaît accepter la réponse pour le marquer à proximité. – Djork
merci @Djork, désolé d'être un PITA, mais cette solution ne peut pas traiter avec des matrices plus grandes en raison de sa consommation de mémoire semble. Essayez par exemple 'dummymat <- matrice (floor (runif (5000, 0, 2)), nrow = 1000, ncol = 5)' –