所以让我说我有一个矩阵,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
答案 0 :(得分:27)
首先,您需要使用arrayInd
获取该索引的行和列。
k <- arrayInd(4, dim(mdat))
然后,您可以通过获取行名和列名
的元素来获取正确的名称rownames(mdat)[k[,1]]
colnames(mdat)[k[,2]]
或者同时使用mapply
:
mapply(`[[`, dimnames(mdat), k)
答案 1 :(得分:7)
首先对矩阵进行子集化会产生一个没有名称的单元素向量,如您在问题中所示。请记住,子集通过复制创建一个全新的对象。在子集化后无法引用原始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