Добавление нового столбца в матричную ошибку

Я пытаюсь добавить новый столбец в существующую матрицу, но каждый раз предупреждаю.

Я пробую этот код:

normDisMatrix$newColumn <- labels

Получение этого сообщения:

Предупреждающее сообщение: В normDisMatrix $newColumn < - метки: принудительное использование LHS в список

После этого, когда я проверяю матрицу, она кажется нулевой:

dim(normDisMatrix)
NULL

Примечание. метки - это просто векторы, которые имеют номера от 1 до 4.

В чем может быть проблема?

Ответ 1

Как указывал @thelatemail, оператор $ не может использоваться для подмножества матрицы. Это связано с тем, что матрица представляет собой только один вектор с атрибутом измерения. Когда вы использовали $, чтобы попытаться добавить новый столбец, R преобразует вашу матрицу в самую низкую структуру, где $ может использоваться для вектора, который является списком.

Функция, которую вы хотите, это cbind() (c olumn bind). Предположим, что у меня есть матрица 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

Чтобы добавить новый столбец из вектора labels, мы можем сделать

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