which                  package:base                  R Documentation

Which indices are TRUE?

Description:

     Give the 'TRUE' indices of a logical object, allowing for array
     indices.

Usage:

     which(x, arr.ind = FALSE)

Arguments:

       x: a 'logical' vector or array.  'NA's are allowed and omitted
          (treated as if 'FALSE').

 arr.ind: logical; should *arr*ay *ind*ices be returned when 'x' is an
          array?

Value:

     If 'arr.ind == FALSE' (the default), an integer vector with
     'length' equal to 'sum(x)', i.e., to the number of 'TRUE's in 'x';
     Basically, the result is '(1:length(x))[x]'.

     If 'arr.ind == TRUE' and 'x' is an 'array' (has a 'dim'
     attribute), the result is a matrix who's rows each are the indices
     of one element of 'x'; see Examples below.

Author(s):

     Werner Stahel and Peter Holzer holzer@stat.math.ethz.ch, for the
     array case.

See Also:

     'Logic', 'which.min' for the index of the minimum or maximum, and
     'match' for the first index of an element in a vector, i.e., for a
     scalar 'a', 'match(a,x)' is equivalent to  'min(which(x == a))'
     but much more efficient.

Examples:

     which(LETTERS == "R")
     which(ll <- c(TRUE,FALSE,TRUE,NA,FALSE,FALSE,TRUE))#> 1 3 7
     names(ll) <- letters[seq(ll)]
     which(ll)
     which((1:12)%%2 == 0) # which are even?
     which(1:10 > 3, arr.ind=TRUE)

     ( m <- matrix(1:12,3,4) )
     which(m %% 3 == 0)
     which(m %% 3 == 0, arr.ind=TRUE)
     rownames(m) <- paste("Case",1:3, sep="_")
     which(m %% 5 == 0, arr.ind=TRUE)

     dim(m) <- c(2,2,3); m
     which(m %% 3 == 0, arr.ind=FALSE)
     which(m %% 3 == 0, arr.ind=TRUE)

     vm <- c(m)
     dim(vm) <- length(vm) #-- funny thing with  length(dim(...)) == 1
     which(vm %% 3 == 0, arr.ind=TRUE)

