2015-01-06 18 views
11

Ich versuche, eine neue Spalte zur vorhandenen Matrix hinzuzufügen, aber immer eine Warnung erhalten.Hinzufügen einer neuen Spalte zu Matrixfehler

Ich versuche, diesen Code:

normDisMatrix$newColumn <- labels 

Erhalten dieser Nachricht:

Warnmeldung: In normDisMatrix $ newColumn < - Etiketten: Nötigung LHS auf eine Liste

Danach, wenn ich die Matrix überprüfe, scheint es Null:

dim(normDisMatrix) 
NULL 

Hinweis: Etiketten sind nur Vektoren, die Zahlen zwischen 1 und 4.

Was das Problem sein kann?

+5

tun Sie nicht '' $ verwenden können Matrizen der Teilmenge - den unteren Teil sehen meiner vorherigen Antwort auf diese Frage: http://stackoverflow.com/questions/16682576/r-error-dimx-must-have-a-positive-length/16682747#16682747 – thelatemail

+0

Sie könnten uns einige Daten geben, wo wir reproduzieren können der Fehler. Wie habe ich keine Ahnung, was "Etiketten" ist noch "normDisMatrix" noch myMatrix – Jason

+0

@Jason danke für Ihren Kommentar, ich korrigierte Frage. – seleucia

Antwort

18

Wie @thelatemail gezeigt hat, kann der Operator $ nicht zur Unterteilung einer Matrix verwendet werden. Dies liegt daran, dass eine Matrix nur ein einzelner Vektor mit einem Dimensionsattribut ist. Wenn Sie $ verwendet haben, um eine neue Spalte hinzuzufügen, hat R Ihre Matrix in die niedrigste Struktur konvertiert, in der $ für den Vektor verwendet werden kann. Dies ist eine Liste.

Die gewünschte Funktion ist cbind() (c PALTE binden). Angenommen, ich habe die Matrix m

(m <- matrix(51:70, 4)) 
#  [,1] [,2] [,3] [,4] [,5] 
# [1,] 51 55 59 63 67 
# [2,] 52 56 60 64 68 
# [3,] 53 57 61 65 69 
# [4,] 54 58 62 66 70 

Um die eine neue Spalte aus einem Vektor hinzufügen labels genannt, können wir

labels <- 1:4 
cbind(m, newColumn = labels) 
#      newColumn 
# [1,] 51 55 59 63 67   1 
# [2,] 52 56 60 64 68   2 
# [3,] 53 57 61 65 69   3 
# [4,] 54 58 62 66 70   4 
Verwandte Themen