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 array indices 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.

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?
     str(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)

