Generieren Sie schnell das kartesische Produkt einer Matrix

Nehmen wir an, ich habe eine Matrixx welches 10 Zeilen und 2 Spalten enthält. Ich möchte eine neue Matrix generierenM das enthält jedes eindeutige Paar von Zeilen ausx - das ist eine neue Matrix mit 55 Zeilen und 4 Spalten.

Z.B.,

x <- matrix (nrow=10, ncol=2, 1:20)

M <- data.frame(matrix(ncol=4, nrow=55))
k <- 1
for (i in 1:nrow(x))
for (j in i:nrow(x))
{
    M[k,] <- unlist(cbind (x[i,], x[j,]))
    k <- k + 1
}

So,x ist:

      [,1] [,2]
 [1,]    1   11
 [2,]    2   12
 [3,]    3   13
 [4,]    4   14
 [5,]    5   15
 [6,]    6   16
 [7,]    7   17
 [8,]    8   18
 [9,]    9   19
[10,]   10   20

Und dannM hat 4 Spalten, die ersten beiden sind eine Zeile vonx und die nächsten 2 sind eine weitere Reihe vonx:

> head(M,10)
   X1 X2 X3 X4
1   1 11  1 11
2   1 11  2 12
3   1 11  3 13
4   1 11  4 14
5   1 11  5 15
6   1 11  6 16
7   1 11  7 17
8   1 11  8 18
9   1 11  9 19
10  1 11 10 20

Gibt es eine schnellere oder einfachere (oder beides) Möglichkeit, dies in R zu tun?

Antworten auf die Frage(5)

Ihre Antwort auf die Frage