R: Which indices are TRUE?

which {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, useNames = TRUE)
    arrayInd(ind, .dim, .dimnames = NULL, useNames = 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?
`ind` | integer-valued index vector, as resulting from `which(x)`.
`.dim` | `dim(.)` integer vector
`.dimnames` | optional list of character `dimnames(.)`, of which only `.dimnames[[1]]` is used.
`useNames` | logical indicating if the value of `arrayInd()` should have (non-null) dimnames at all.

### 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 `arrayInd(which(x), dim(x), dimnames(x))`, namely a matrix whose rows each are the indices of one element of `x`; see Examples below.

### Author(s)

Werner Stahel and Peter Holzer (ETH Zurich) proposed the `arr.ind` option.

### 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)

[Package base version 2.15.1 Index]