[R-br] máximo e mínimo de uma matriz de distancia.

Tomás Barcellos tomas.barcellos em gmail.com
Segunda Setembro 11 12:03:16 -03 2017


Bom dia,

Se a diagonal é 0 (no exemplo passado não é), então basta ordenar os
valores e escolher aquele que for o primeiro depois da diagonal.

Supondo matriz m x n, basta pegar o menor entre `m` e `n` para determinar a
quantidade de valores na matriz.

# cria matriz do exemplo
valores <- c(0, 86.441, 63.108, 120.692, 21.903,
                    86.441, 0, 7.663, 39.936, 39.71,
                    63.108, 7.663, 0, 30.014, 32.262,
                    120.692, 39.936, 30.014, 0, 97.077,
                    86.463, 5.358, 5.075, 40.632, 41.155, # este ultimo
valor deveria ser 0 (zero) para cumprir a regra da diagonal zerada
                    58.086, 22.672, 5.571, 20.989, 43.635,
                    160.623, 84.723, 99.275, 59.463, 121.871,
                    149.096, 78.921, 107.048, 104.64, 94.213)
mat <- matrix(valores, 8, byrow = TRUE)

# determina menor dimensão
menor_dim <- min(dim(mat))

# pega menor valor fora da diagonal
menor_valor <- sort(mat)[menor_dim + 1]

# Determina posição na matriz
posicao <- which(mat == menor_valor)
linha <- posicao %% dim(mat)[1]
coluna <- (posicao %/% dim(mat)[1]) + 1

mat[linha, coluna]

Para determinar o maior valor basta adicionar o argumento `decreasing =
TRUE` na chamada da função `sort()`

Aqui só retorna os indices de linha e coluna, mas conseguir o nome depois
disso não é difícil.

Att,

Tomás Barcellos


Em 11 de setembro de 2017 11:27, Rodrigo Lima via R-br <
r-br em listas.c3sl.ufpr.br> escreveu:

> Prezados blogueiros
>
> Bom diaz
> Estou com uma dúvida básica no R e preciso da ajuda de vocês. Eu tenho uma
> matriz de distância genética entre centenas de indivíduos (parte dela
> abaixo) e quero identificar a combinação linha x coluna com máximo valor e
> a combinação linha x coluna com mínimo valor eliminando a diagonal, pois
> essa tem valor zero. Vamos imaginar que o mínimo é 5.075. Logo, quero saber
> esse valor e posição dele, por por exemplo. Os nomes da coluna e diagonal
> são de acesso de germoplasma.
>    4
> 5 5.075
>
> 1 2 3 4 5
> 1 0 86.441 63.108 120.692 21.903
> 2 86.441 0 7.663 39.936 39.71
> 3 63.108 7.663 0 30.014 32.262
> 4 120.692 39.936 30.014 0 97.077
> 5 86.463 5.358 5.075 40.632 41.155
> 6 58.086 22.672 5.571 20.989 43.635
> 7 160.623 84.723 99.275 59.463 121.871
> 8 149.096 78.921 107.048 104.64 94.213
>
> Grato.
>
> Rodrigo.
>
> --
> Prof. Rodrigo Oliveira de Lima
> Federal University of Viçosa
> Department of Plant Sciences
> Viçosa, MG, Brazil, 36570-900,
> Phone: +55(31)3899-2781 <+55%2031%203899-2781>/3247
> Fax: +55(31)3899-2614 <+55%2031%203899-2614>
> Email: rodrigoodelima em ufv.br
> CV: http://lattes.cnpq.br/2761299616351806
>
>
> _______________________________________________
> R-br mailing list
> R-br em listas.c3sl.ufpr.br
> https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br
> Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça
> código mínimo reproduzível.
>
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20170911/56dfd75e/attachment.html>


Mais detalhes sobre a lista de discussão R-br