| which {base} | R Documentation |
Give the TRUE indices of a logical object, allowing for array
indices.
which(x, arr.ind = FALSE, useNames = TRUE) arrayInd(ind, .dim, .dimnames = NULL, useNames = FALSE)
x |
a |
arr.ind |
logical; should array indices be returned
when |
ind |
integer-valued index vector, as resulting from
|
.dim |
|
.dimnames |
optional list of character |
useNames |
logical indicating if the value of |
If arr.ind == FALSE (the default), an integer vector with
length equal to sum(x), i.e., to the number of
TRUEs 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.
Werner Stahel and Peter Holzer (ETH Zurich) proposed the
arr.ind option.
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.
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)