[R] returning the largest element in an array/matrix?

Henrik Bengtsson hb at maths.lth.se
Tue Mar 7 14:53:36 CET 2006


This is a problem how to convert vector indices to array indices. Here
is a general solution utilizing the fact that matrices are stored
column by column in R (this extends to arrays of any dimension):

arrayIndex <- function(i, dim) {
  ndim <- length(dim);      # number of dimension
  v <- cumprod(c(1,dim));  # base

  # Allocate return matrix
  j <- matrix(NA, nrow=length(i), ncol=ndim);

  i <- (i-1);     # one-based indices
  for (kk in 1:ndim)
    j[,kk] <- (i %% v[kk+1])/v[kk];
  1 + floor(j);  # one-based indices
}

# Now we can the optimized which.max() function:

m <- matrix(1:14, nrow=7, ncol=4)
arrayIndex(which.max(m), dim=dim(m))

Gives:
     [,1] [,2]
[1,]    7    2

# The less efficient:
arrayIndex(which(m==max(m)), dim=dim(m))

Gives:
     [,1] [,2]
[1,]    7    2
[2,]    7    4

BTW, isn't there such a function in R already?  I tried to find it,
but I couldn't.

Cheers

Henrik

On 3/7/06, Petr Pikal <petr.pikal at precheza.cz> wrote:
> Hi
>
> If you do not insist on which.max() you can use
>
> which(mat==max(mat), arr.ind=T)
>
> HTH
> Petr
>
>
>
>
> On 6 Mar 2006 at 20:55, Michael wrote:
>
> Date sent:              Mon, 6 Mar 2006 20:55:20 -0800
> From:                   Michael <comtech.usa at gmail.com>
> To:                     R-help at stat.math.ethz.ch
> Subject:                [R] returning the largest element in an array/matrix?
>
> > Hi all,
> >
> > I want to use "which.max" to identify the maximum in a 2D array/matrix
> > and I want "argmin" and return the row and column indices.
> >
> > But "which.max" only works for vector...
> >
> > Is there any convinient way to solve this problem?
> >
> > Thanks a lot!
> >
> >  [[alternative HTML version deleted]]
> >
> > ______________________________________________
> > R-help at stat.math.ethz.ch mailing list
> > https://stat.ethz.ch/mailman/listinfo/r-help
> > PLEASE do read the posting guide!
> > http://www.R-project.org/posting-guide.html
>
> Petr Pikal
> petr.pikal at precheza.cz
>
> ______________________________________________
> R-help at stat.math.ethz.ch mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html




More information about the R-help mailing list