[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