Как получить матричный столбец и имя строки по значению индекса матрицы?
Итак, скажем, у меня есть матрица, mdat, и я знаю только номер индекса. Как получить имена столбцов и строк? Например:
> mdat <- matrix(c(1,2,3, 11,12,13), nrow = 2, ncol=3, byrow=TRUE,
dimnames = list(c("row1", "row2"), c("C.1", "C.2", "C.3")))
> mdat[4]
[1] 12
> names(mdat[4])
NULL
> colnames(mdat[4])
NULL
> rownames(mdat[4])
NULL
> dimnames(mdat[4])
NULL
Ответы
Ответ 1
Сначала вам нужно получить строку и столбец этого индекса, используя arrayInd
.
k <- arrayInd(4, dim(mdat))
Затем вы можете получить правильное имя, получив этот элемент имен строк и столбцов
rownames(mdat)[k[,1]]
colnames(mdat)[k[,2]]
Или оба сразу используя mapply
:
mapply(`[[`, dimnames(mdat), k)
Ответ 2
Подмножество матрицы сначала приводит к одноэлементному вектору, который не имеет имен, как вы видите в своем вопросе. Помните, что подмножество создает полностью новый объект путем копирования. Нет способа ссылаться на исходный mdat
после подмножества.
Это более ясно, если вы присваиваете результат подмножества другому объекту.
> m <- mdat[4]
> m
[1] 12
> names(m) # no names were printed above... so
NULL
Вы действительно хотите сначала получить доступ к именам столбцов/строк и подмножить их.
> colnames(mdat)[3]
[1] "C.3"
> rownames(mdat)[2]
[1] "row2"
Вы можете повторно назначить имена столбцов и строк аналогично.
> colnames(mdat)[3] <- "C3"
> rownames(mdat)[2] <- "row.2"
> mdat
C.1 C.2 C3
row1 1 2 3
row.2 11 12 13