# whichVector.logical

0th

Percentile

##### Identifies TRUE elements in a logical vector

Identifies TRUE elements in a logical vector. This method is faster than which() for logical vectors, especially when there are no missing values.

##### Usage
## S3 method for class 'logical}(x, na.rm=TRUE, use.names=TRUE, ...)':
whichVectorundefined

x{A logical vector of length N.}
na.rm{If TRUE, missing values are treated as FALSE,
otherwise they are returned as NA.}
use.names{If TRUE, the names attribute is preserved,
otherwise it is not return.}
...{Not used.}

Returns an integer vector of length less or equal to N.

Benchmarking{
Simple comparison on R v2.7.1 on Windows XP, show that
this implementation can be more than twice as fast as
which(), especially when there are no missing
value (and na.rm=FALSE) is used.
}

# - - - - - - - - - - - - - - - - - - - - - - - - - -
# Simulate two large named logical vectors,
# one with missing values one with out
# - - - - - - - - - - - - - - - - - - - - - - - - - -
N <- 1e6;

# Vector #1
x <- sample(c(TRUE, FALSE), size=N, replace=TRUE);
names(x) <- seq_along(x);

# Vector #2
y <- x
y[sample(N, size=0.1*N)] <- NA;

# - - - - - - - - - - - - - - - - - - - - - - - - - -
# Validate consistency
# - - - - - - - - - - - - - - - - - - - - - - - - - -
stopifnot(identical(which(x), whichVector(x)));
stopifnot(identical(which(y), whichVector(y)));

# - - - - - - - - - - - - - - - - - - - - - - - - - -
# Benchmarking
# - - - - - - - - - - - - - - - - - - - - - - - - - -
# Number of iterations
K <- 5;

t1 <- 0;
for (kk in 1:K) {
t1 <- t1 + system.time({ idxs1 <- which(x) });
};

t2 <- 0;
for (kk in 1:K) {
t2 <- t2 + system.time({ idxs2 <- whichVector(x, na.rm=FALSE) });
};

cat(sprintf("whichVector(x, na.rm=FALSE)/which(x): %.2f
", (t2/t1)));
stopifnot(identical(idxs1, idxs2));

t1 <- 0;
for (kk in 1:K) {
t1 <- t1 + system.time({ idxs1 <- which(y) });
};

t2 <- 0;
for (kk in 1:K) {
t2 <- t2 + system.time({ idxs2 <- whichVector(y) });
};

cat(sprintf("whichVector(y)/which(y): %.2f
", (t2/t1)));
stopifnot(identical(idxs1, idxs2));

[object Object]

which()

methods
programming
##### Aliases
• whichVector.logical
• whichVector.logical
• whichVector.matrix
Documentation reproduced from package R.utils, version 1.1.0, License: LGPL (>= 2.1)

### Community examples

Looks like there are no examples yet.