2014-07-09 10 views
7

Se ho una matrice:Trovare il valore massimo assoluto preservando + o - simbolo

mat=matrix(c(-21,14,28,17,-16,-9,-17,-30,18), nrow=3) 
mat 
      [,1] [,2] [,3] 
    [1,] -21  17 17 
    [2,] 14 -16 -30 
    [3,] 28  -9 18 

posso isolare il più alto valore assoluto semplicemente con

max(abs(mat)) 

Tuttavia come faccio a conservare il segno quindi ritorno -30? Per alcuni contesti, ho un gran numero di matrici e ho bisogno di un comando per isolare il numero assoluto più alto in tutte, compreso il segno (alcune saranno positive altre negative).

Grazie in anticipo!

risposta

9

È necessario l'indice del valore nella matrice che è il valore assoluto massimo, che è possibile utilizzare per restituire il valore stesso. which.max farà questo (e which.min per il contrario):

mat[which.max(abs(mat))] 
# [1] -30 
+1

Ah, così semplice. Grazie per il tuo aiuto –

+0

Tu * potresti * renderlo più complicato :-) facendo 'amat <-abs (mat); smat <-sign (mat); amat [max (amat)] * smag [max (amat)] '. Ma ovviamente non lo consiglierei di farlo! –

5

Sulla risposta di Simon. Se si voleva una funzione che ha restituito il massimo assoluto per un vettore o di una matrice, è possibile utilizzare il seguente:

absmax <- function(x) { x[which.max(abs(x))]} 

esempio

> absmax(c(-10, 0, 9)) 
[1] -10 
+2

Mi piace la funzione, tuttavia non sempre restituisce un singolo valore. Ma dato che in questo contesto non è fattibile un corretto ties.method (come in base :: rank), lo farei semplicemente ritornare al primo valore di absmax: 'absmax <- function (x) {x [which.max (abs (x))] [1]} ' –

Problemi correlati