2015-01-06 22 views
11

Tôi đang cố gắng để thêm một cột mới vào ma trận hiện có, nhưng nhận mọi cảnh báo.Thêm một cột mới vào lỗi ma trận

Tôi đang cố gắng mã này:

normDisMatrix$newColumn <- labels 

Bắt bài này:

nhắn Cảnh báo: Trong normDisMatrix $ newColumn < - nhãn: Buộc LHS vào một danh sách

Sau đó, khi tôi kiểm tra ma trận, có vẻ như null:

dim(normDisMatrix) 
NULL 

Lưu ý: nhãn chỉ là vectơ mà có số lượng từ 1 đến 4.

gì có thể là vấn đề?

+5

Bạn không thể sử dụng '$' để tập hợp con các ma trận - xem phần dưới cùng các câu trả lời trước của tôi cho câu hỏi này: http://stackoverflow.com/questions/16682576/r-error-dimx-must-have-a-positive-length/16682747#16682747 – thelatemail

+0

Bạn có thể cung cấp cho chúng tôi một số dữ liệu mà chúng tôi có thể tái tạo lỗi. Như là tôi không có đầu mối những gì 'nhãn' cũng không phải là 'normDisMatrix' cũng không myMatrix – Jason

+0

@Jason cảm ơn bạn đã bình luận của bạn, tôi sửa chữa câu hỏi. – seleucia

Trả lời

18

Như @thelatemail chỉ ra, các nhà điều hành $ không thể được sử dụng để tập hợp con một ma trận. Điều này là do ma trận chỉ là một vectơ đơn với thuộc tính thứ nguyên. Khi bạn sử dụng $ để cố gắng thêm một cột mới, R chuyển đổi ma trận của bạn để cấu trúc thấp nhất nơi $ có thể được sử dụng trên vector, mà là một danh sách.

Chức năng bạn muốn là cbind() (c olumn bind). Giả sử tôi có ma trận 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 

Để thêm một cột mới từ một vector gọi labels, chúng ta có thể làm

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 
Các vấn đề liên quan