2015-08-21 13 views
6

Ich habe eine m x n Matrix, die wie folgt aussieht:alle möglichen Kombinationen Get Zeile in Matrix

1 2 3 
4 5 6 

Was ist der schnellste Weg, alle möglichen Kombinationen von Reihe zu bekommen? In diesem Fall wäre das c(1,4), c(1,5), c(1,6), c(2,4), c(2,5) ... c(3,5), c(3,6)

Wie löse ich dies mit einem vektorisierten Ansatz? Im Allgemeinen würde eine solche n^m Matrix solche Kombinationen haben.

Antwort

6

können Sie verwenden, um die expand.grid Funktion alle Kombinationen der Elemente in jeder Reihe zu bekommen, um eine Liste von Zeilen Aufbau split Verwendung als here gezeigt und Leiten jedes Element dieser Liste expand.grid mit der do.call Funktion:

(m <- rbind(1:3, 4:6)) 
#  [,1] [,2] [,3] 
# [1,] 1 2 3 
# [2,] 4 5 6 
do.call(expand.grid, split(m, rep(1:nrow(m), ncol(m)))) 
# 1 2 
# 1 1 4 
# 2 2 4 
# 3 3 4 
# 4 1 5 
# 5 2 5 
# 6 3 5 
# 7 1 6 
# 8 2 6 
# 9 3 6 

Hier ist ein Beispiel mit einer 3 x 2-Matrix anstelle einer 2 x 3 Matrix:

(m <- matrix(1:6, nrow=3)) 
#  [,1] [,2] 
# [1,] 1 4 
# [2,] 2 5 
# [3,] 3 6 
do.call(expand.grid, split(m, rep(1:nrow(m), ncol(m)))) 
# 1 2 3 
# 1 1 2 3 
# 2 4 2 3 
# 3 1 5 3 
# 4 4 5 3 
# 5 1 2 6 
# 6 4 2 6 
# 7 1 5 6 
# 8 4 5 6 
+6

'expand.grid (split (m, Zeile (m)))' könnte einfacher – jenesaisquoi

Verwandte Themen