2015-01-06 14 views
11

Próbuję dodać nową kolumnę do istniejącej macierzy, ale otrzymuję ostrzeżenie za każdym razem.Dodawanie nowej kolumny do błędu macierzy

Próbuję ten kod:

normDisMatrix$newColumn <- labels 

ten komunikat:

wiadomość Uwaga: W normDisMatrix $ newColumn < - Etykiety: Zmuszanie LHS do listy

Po tym, gdy sprawdzam matrycę, wydaje się zerowa:

dim(normDisMatrix) 
NULL 

Uwaga: etykiety są tylko wektory, które mają numery między 1 i 4.

Co może być problemem?

+5

Nie można używać '$' do podzbioru matryce - patrz dolna część z mojej poprzedniej odpowiedzi na to pytanie: http://stackoverflow.com/questions/16682576/r-error-dimx-must-have-a-pozytywny-length/16682747#16682747 – thelatemail

+0

Możesz podać nam dane, w których możemy odtworzyć błąd. Nie mam pojęcia, czym są "etykiety" ani "normDisMatrix" ani myMatrix – Jason

+0

@Jason dziękuję za komentarz, poprawiłem pytanie. – seleucia

Odpowiedz

18

Jak zauważyła @mailloga, operator $ nie może być używany do podzbioru macierzy. Dzieje się tak dlatego, że macierz jest tylko pojedynczym wektorem z atrybutem wymiaru. Kiedy użyłeś $, aby spróbować dodać nową kolumnę, R przekształcił twoją macierz na najniższą strukturę, gdzie $ może być użyty w wektorze, który jest listą.

Funkcja chcesz to cbind() (c olumn wiążą). Załóżmy, że mam matrycę 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 

Aby dodać nową kolumnę z wektora zwanego labels możemy zrobić

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 
Powiązane problemy