`die ()` - Funktion für die matrix-Indizes
Sagen, ich habe einige matrix, zum Beispiel:
> m = matrix(rep(c(0, 0, 1), 4), nrow = 4)
> m
[,1] [,2] [,3]
[1,] 0 0 1
[2,] 0 1 0
[3,] 1 0 0
[4,] 0 0 1
Wenn ich which
, bekomme ich die Liste der normalen Indizes:
> which(m == 1)
[1] 3 6 9 12
Möchte ich, um so etwas wie die matrix-Indizes - jeder index, der die Zeile und die Spalte Nummer:
[,1] [,2]
[1,] 3 1
[2,] 2 2
[3,] 1 3
[4,] 4 3
Gibt es eine einfache Funktion, dies zu tun? Außerdem, es sollte irgendwie enthalten die Zeilen-und Spaltennamen:
> rownames(m) = letters[1:4]
> colnames(m) = letters[5:7]
> m
e f g
a 0 0 1
b 0 1 0
c 1 0 0
d 0 0 1
aber ich weiß nicht, wie, vielleicht, wie
[,1] [,2] [,3] [,4]
[1,] 3 1 c e
[2,] 2 2 b f
[3,] 1 3 a g
[4,] 4 3 d g
oder, vielleicht wieder 2 Vektoren (Zeilen oder Spalten), wie
c b a d
3 2 1 4
e f g g
1 2 3 3
InformationsquelleAutor TMS | 2011-09-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Für Ihre erste Frage müssen Sie sich auch übergeben
arr.ind= TRUE
zuwhich
:?which
helfen, aber er sagt: "arr.ind logisch - sollte die array-Indizes werden zurückgegeben, wenn x ein array ist?", das ist ziemlich verwirrend! Warum sprechen Sie von array-Indizes, wenn Sie zurückkehren, matrix-Indizes? (Mit array, ich in der Regel meine 1D Vektor)"array" ist der allgemeinere Fall, einschließlich "Vektoren" mit einem degenerierten singleton dimension, Matrizen (mit 2 Dimensionen), 3D, 4D, ... arrays - Vektoren mit keine dimension sind nicht 1D in diesem Sinne, und vergessen Sie nicht: es gibt rekursiv Vektoren (Liste)
Ein array kann 1, 2 oder mehr Dimensionen. Eine matrix ist der Spezialfall einer 2-dimensionalen array. Sehen
?matrix
und?array
.Ich kann nicht glauben, dass ich nie wusste, über
arr.ind
! Ich habe immer verwendet einige schrecklich ineffizient hack sich auf Anrufe aufrow()
undcol()
.InformationsquelleAutor David Alber
Kann man nicht mischen numerische und alpha in einer matrix, aber Sie können in einer Daten.Rahmen:
InformationsquelleAutor 42-