web-dev-qa-db-fra.com

Récupère le nom de la ligne et de la colonne de l'élément minimum d'une matrice

J'ai besoin d'obtenir le nom de la ligne et de la colonne du plus petit élément d'une matrice

> mat = matrix(data=runif(12), nrow = 4, ncol=4)
> rownames(mat) = colnames(mat) = letters[1:4]
> 
> mat
  a         b         c         d
a 0.3167865 0.6958895 0.4233572 0.3167865
b 0.1042599 0.1552235 0.8461520 0.1552235
c 0.6286461 0.9749868 0.2390978 0.6286461
d 0.5923721 0.7823673 0.8427426 0.5923721
> min = min(mat)
> min
> 0.1042599

Dans cet exemple, j'aimerais obtenir "a" et "b"

36
Sebastian
> inds = which(mat == min(mat), arr.ind=TRUE)
> inds
  row col
a   1   2
> rnames = rownames(mat)[inds[,1]]
> cnames = colnames(mat)[inds[,2]]

Cela vous donnera les noms de ligne/colonne pour chaque entrée qui est égale à la valeur minimale; si vous voulez juste le premier, vous ne pouvez vérifier que les inds [1,1] et inds [1,2].

42
bnaul