2015-01-06 15 views
11

Sto tentando di aggiungere una nuova colonna alla matrice esistente, ma ricevendo sempre l'avviso.Aggiunta di una nuova colonna all'errore di matrice

sto cercando di questo codice:

normDisMatrix$newColumn <- labels 

Ottenere questo messaggio:

messaggio di avviso: In normDisMatrix $ newColumn < - Etichette: costringere LHS a un elenco

Dopo di esso, quando controllo la matrice, sembra nullo:

dim(normDisMatrix) 
NULL 

Nota: etichette sono solo vettori che hanno numeri compresi tra 1 e 4.

Quale può essere il problema?

+5

Non è possibile usare '' $ al sottoinsieme matrici - vedere la parte inferiore della mia precedente risposta a questa domanda: http://stackoverflow.com/questions/16682576/r-error-dimx-must-have-a-positive-length/16682747#16682747 – thelatemail

+0

Potresti fornirci alcuni dati su cui possiamo riprodurre l'errore. Come non ho idea di cosa siano "labels" né "normDisMatrix" né myMatrix – Jason

+0

@Jason grazie per il tuo commento, ho corretto la domanda. – seleucia

risposta

18

Come ha sottolineato @thelatemail, l'operatore $ non può essere utilizzato per subsetare una matrice. Questo perché una matrice è solo un vettore con un attributo dimensione. Quando hai utilizzato $ per provare ad aggiungere una nuova colonna, R ha convertito la matrice nella struttura più bassa in cui è possibile utilizzare $ sul vettore, che è un elenco.

La funzione che si desidera è cbind() (c olumn bind). Supponiamo che io ho la matrice 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 

Per aggiungere la una nuova colonna da un vettore chiamato labels, possiamo fare

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 
Problemi correlati