Alors disons que j'ai une matrice, mdat et je ne connais que le numéro d'index. Comment récupérer les noms de colonne et de ligne? Par exemple:
> 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
Vous devez d'abord obtenir la ligne et la colonne de cet index à l'aide de arrayInd
.
k <- arrayInd(4, dim(mdat))
Vous pouvez ensuite obtenir le bon nom en obtenant cet élément des noms de ligne et de colonne
rownames(mdat)[k[,1]]
colnames(mdat)[k[,2]]
Ou les deux à la fois en utilisant mapply
:
mapply(`[[`, dimnames(mdat), k)
Le sous-ensemble de la matrice résulte d'abord en un vecteur à un élément qui n'a pas de nom, comme vous le montrez dans votre question. N'oubliez pas que le sous-ensemble crée un objet complètement nouveau via la copie. Il n'y a aucun moyen de référencer le mdat
d'origine après le sous-ensemble.
Ceci est plus clair si vous affectez le résultat du sous-ensemble à un autre objet.
> m <- mdat[4]
> m
[1] 12
> names(m) # no names were printed above... so
NULL
Vous voulez vraiment accéder d'abord aux noms de colonne/ligne et au sous-ensemble eux.
> colnames(mdat)[3]
[1] "C.3"
> rownames(mdat)[2]
[1] "row2"
Vous pouvez réaffecter des noms de colonne/ligne de la même manière.
> colnames(mdat)[3] <- "C3"
> rownames(mdat)[2] <- "row.2"
> mdat
C.1 C.2 C3
row1 1 2 3
row.2 11 12 13